haiku/headers/private
Julian Harnath b54b3ae511 app_server: add a cache for AlphaMasks
* If the same shape alpha mask is set again and again, we now keep
  the rendered masks in a cache. On certain websites, WebKit sets
  the same shape for clipping hundreds of times, which uses a lot
  of time to render the masks.

* When a shape mask was generated, we put it into AlphaMaskCache.
  The constructor for ShapeAlphaMask is made private and a factory
  method is used for instantiation instead, which transparently
  looks up in the cache whether a suitable mask was already generated
  before (so the entire caching is encapsulated inside the AlphaMask
  class).

* When taking a mask out of the cache, we still create a new
  AlphaMask instance. However, the new instance will share the
  mask bitmap with the previously generated instance (aside from
  the rendering of their bitmap, AlphaMask instances are pretty
  lightweight). Shape masks are only seen as identical when
  their shape is the same, the inverse flag, and they have the
  same parent mask.

* Cache is limited to a fixed size of currently 8 MiB, using a
  simple random replacement scheme. An LRU scheme can be added in
  the future if necessary. Counting of bytes for the cache size
  includes parent masks of masks in the cache, even if the parent
  itself is not cached. A reference counter for "indirect" cache
  references keeps track of which masks are not part of the cache,
  but still need to be added to the cache byte size.

* For now, only for ShapeAlphaMasks, other mask types can be added
  as necessary.
2015-11-14 16:09:52 +01:00
..
app launch_daemon: Fixed preregister consequences. 2015-11-11 16:04:02 +01:00
audio
binary_compatibility BControl: Add icon support 2013-12-22 02:48:25 +01:00
bluetooth h2: Fix bluetooth driver build, missing PrivateKernelHeaders 2014-05-18 22:33:56 -05:00
debug Move comment to correct function. 2013-05-01 19:52:00 -04:00
device power: Remove old cpufreq interface 2013-11-22 05:30:14 +01:00
drivers Reworked little endian bitfields a bit. 2015-11-10 08:47:48 +01:00
file_systems Fix building Haiku from Haiku 2014-07-13 15:35:31 +02:00
firewire include strings.h where appriopriate... 2014-08-08 22:40:37 +02:00
fs_shell EntryCache: Add entry_cache_add_missing() for negative caching. 2015-08-20 21:25:56 +02:00
graphics intel_extreme: Intial work for ValleyView support 2015-10-15 23:39:31 -05:00
index_server
input
interface app_server: add a cache for AlphaMasks 2015-11-14 16:09:52 +01:00
kernel Add operator delete(void *, size_t) for C++14. 2015-11-08 00:38:20 +01:00
libroot libroot_debug: Merge guarded heap into libroot_debug. 2015-08-13 22:12:18 +02:00
locale Fix instanciate_catalog prototype 2015-01-17 17:02:40 +01:00
mail Mail server: fix disabling notifications 2015-01-14 16:27:33 +01:00
media Fix GCC 5 build. 2015-10-26 19:05:24 +01:00
midi Midi: Remove some duplicated code 2015-08-27 11:51:57 +02:00
mount
net libbnetapi: Add BNetworkRoute to replace use of route_entry. 2015-04-12 18:50:00 +02:00
notification Notifications default to enabled on first boot. 2014-11-25 08:50:47 +01:00
package Moved BJob, and JobQueue into the support kit. 2015-05-21 21:37:01 +02:00
print Remove remaining unnecessary 'volatile' qualifiers 2013-11-06 00:03:07 +01:00
runtime_loader system: Build using public elf.h header 2015-11-07 11:49:56 +13:00
screen_saver When testing screensaver, don't have mouse move exit the screen saver. 2014-12-10 21:18:30 +01:00
shared BToolBar: made FindButton() public. 2015-09-04 17:33:46 +02:00
storage storage kit: don't expose the dev_t in BPartition::Mount() 2014-09-15 16:28:41 +12:00
support JobQueue: fixed incorrect requeuing. 2015-10-18 13:11:26 +02:00
syslog_daemon syslog_daemon: Converted to BServer. 2015-07-22 20:40:47 +02:00
system system: Build using public elf.h header 2015-11-07 11:49:56 +13:00
textencoding
tracker Tracker: IconMenuItem: Don't "use namespace" in a shared header. 2015-07-23 11:50:23 -04:00
usb_vision
userlandfs UserlandFS: Make 64 bit clean and enable build for x86_64. 2015-03-29 16:25:17 +02:00
virtio virtio: add queue_is_full(), queue_is_empty(), queue_size() hooks. 2013-09-18 17:43:39 +02:00
vmdk