Use a new LayerProperties struct to hold all the data necessary to
create or update compositor layers. This reduces a lot of duplication
when passing it along.
Instead of creating, sizing, and setting up layers using several
messages use only one. If the layer already exists, it will be updated
to reflect the new properties. The clip rect is still set in a separate
message, but that will be eliminated in a later commit.
The crate provides an interface to the Mac-specific `task_info()`
function in general, and the module provides an interface to the
TASK_BASIC_INFO flavor. Currently only the `virtual_size` and
`resident_size` values of the `task_basic_info` struct are exposed, but
there's obvious room for expansion.
This is used to implement the -m measurements on Mac.
This idiom has been dying out in new Rust code; it's especially
confusing for layers because there is a higher chance of making the
mistaken assumption that the iteration is occurring over multiple
layers.
Rename find_child_with_layer_and_pipeline_id to
find_child_with_pipeline_and_layer_id so that it matches both the
logical and actual parameter ordering.
Using {:?} prints a debugging representation such as
collections::string::String{
vec: collections::vec::Vec<u8>{
len: 4u,
cap: 4u,
ptr: (0x7f75670285d8 as *mut ())
}
}
which is not very helpful.
the font cache task, and adapts client code to use it. It also
cleans up some existing code paths.
- Fonts are only read once from disk while in use (they
are discarded if the reference count reaches zero, however).
This saves memory and prevents unnecessary reading from disk.
- It will be easier to add web font support, as all fonts
are created and managed in a single place and the entire
pipeline ensures that only one in-memory copy of font data
is required.
An overview of how the pieces fit together:
FontTemplate - A structure containing everything that
is required to create (and select) font handles. This
structure is shared among all matching font handles
(via Arc).
FontTemplateData - A platform specific structure that
contains the actual font data inside a template (this is
a byte array on Linux/Android, CTFont on Mac).
FontHandle - An opaque, platform specific handle to
a font instance. Each FontHandle contains an Arc<>
reference to the FontTemplate it was created from.
FontCache - This is a separate task, that is responsible
for loading and caching FontTemplate structures. There
is one FontCache per constellation. It is only ever accessed
via the FontContext described below.
FontContext - This is the public interface to the FontCache
and is used by the layout and render code to create font
handles. These must *not* be shared between threads. There
is typically one FontContext per thread/task.
Currently the compositor tracks its state in the processing of shutting
down with two boolean instance variables `shutting_down` and `done`, but
these two variables really implement a three-state abstraction.