mutter/clutter
Owen W. Taylor 4ef041371c text: correct caching logic
This patch combines a number of fixes and improvements to the
layout caching logic in ClutterText.

 * Fix: The width must always be set on the PangoLayout when painting.
   This is necessary because the layout aligns in the width, and
   even when we think we are left-aligned, the auto-dir feature
   of PangoLayout may result in right-alignment.

 * Fix: We should only ever try to reuse a cached layout based
   on its logical width if layout.width was -1 when computing
   that logical width. If the layout was already ellipsized,
   then comparing the logical width to the new width we are
   trying to wrap to doesn't make sense. (If "abc" ellipsizes
   to a 15-pixel wide "..." for a width of 1 pixel, that doesn't
   mean that we should use "..." for a width of 15 pixels. Maybe
   "abc" itself is 15 pixels wide.)

 * Improvement: rather than looking up cached layouts based on the
   input allocation_width/allocation_height, look them up based
   on the actual width/height/ellipsize that we pass to create
   a layout. This is simpler and improves the chance we'll get
   a cache hit when appropriate even if there are small floating
   point differences.

Note because of the first fix this is less aggressive than dd40732
in caching layouts; get_preferred_width() and painting can't share
a layout since get_preferred_width() needs to pass a width of -1
to Pango and painting needs to pass the real width.

The patch has been updated from the clutter-1.2 branch to current
master; using the profiling instrumentation it is possible to verify
with test-text-field that the hit/miss counters go from:

   Name                                   Total Per Frame
   ----                                   ----- ---------
   Text layout cache hit counter          13    6
   Text layout cache miss counter         11    5

before applying the patch, to:

   Name                                   Total Per Frame
   ----                                   ----- ---------
   Text layout cache miss counter         4     2
   Text layout cache hit counter          3     1

after applying the patch.

https://bugzilla.gnome.org/show_bug.cgi?id=618104

http://bugzilla.openedhand.com/show_bug.cgi?id=2109

Signed-off-by: Emmanuele Bassi <ebassi@linux.intel.com>
2010-05-11 12:22:30 +01:00
..
cogl cogl-framebuffer: Flush journal when creating fbo 2010-05-10 14:38:10 +01:00
eglnative eglnative: Connect StageWindow.show and .hide 2010-03-05 08:48:52 +00:00
eglx Remove mentions of the FSF address 2010-03-01 12:56:10 +00:00
fruity Remove mentions of the FSF address 2010-03-01 12:56:10 +00:00
glx Ignore unexpected GLX_BufferSwapComplete 2010-05-05 12:00:40 +01:00
json json: Update JsonParser 2010-03-19 11:13:04 +00:00
osx Remove mentions of the FSF address 2010-03-01 12:56:10 +00:00
win32 win32: Use GCLP_* instead of GCL_* when calling GetClassLongPtr 2010-04-09 15:43:42 +01:00
x11 Call backend handle_event from clutter_x11_handle_event() 2010-05-04 11:04:03 +01:00
clutter-actor.c actor: Make consistent use of the name in error reporting 2010-04-27 10:12:25 +01:00
clutter-actor.h actor: Add has_allocation() method 2010-03-26 00:46:31 +00:00
clutter-alpha.c Remove mentions of the FSF address 2010-03-01 12:56:10 +00:00
clutter-alpha.h
clutter-animatable.c [animatable] Allow validation in ::animate_property 2009-05-27 13:01:31 +01:00
clutter-animatable.h docs: Documentation fixes 2010-03-02 11:12:32 +00:00
clutter-animation.c Fix annotation typos 2010-05-09 00:14:24 +01:00
clutter-animation.h animation: Use 'guint' for set_duration() parameter 2010-05-05 11:32:39 +01:00
clutter-animator.c animator: fix looping when doing cubic interpolation 2010-05-05 18:24:53 +01:00
clutter-animator.h animator: s/clutter_animator_run/clutter_animator_start/ 2010-03-02 17:03:03 +00:00
clutter-backend.c Add error reporting for create_context() failures 2010-03-17 17:40:34 +00:00
clutter-backend.h device: Impose per-backend DeviceManager 2010-02-17 17:46:48 +00:00
clutter-behaviour-depth.c Remove mentions of the FSF address 2010-03-01 12:56:10 +00:00
clutter-behaviour-depth.h [docs] Bring down the undocumented symbols to 2% 2009-03-16 15:00:55 +00:00
clutter-behaviour-ellipse.c Remove mentions of the FSF address 2010-03-01 12:56:10 +00:00
clutter-behaviour-ellipse.h Remove the last few fixed-point entry points 2009-06-19 16:38:35 +01:00
clutter-behaviour-opacity.c Remove mentions of the FSF address 2010-03-01 12:56:10 +00:00
clutter-behaviour-opacity.h docs: Fix gtk-doc warnings 2010-04-22 16:39:18 +01:00
clutter-behaviour-path.c Remove mentions of the FSF address 2010-03-01 12:56:10 +00:00
clutter-behaviour-path.h docs: Fix the 'Since' annotation for some functions 2009-11-19 11:51:21 +00:00
clutter-behaviour-rotate.c Remove mentions of the FSF address 2010-03-01 12:56:10 +00:00
clutter-behaviour-rotate.h Remove the last few fixed-point entry points 2009-06-19 16:38:35 +01:00
clutter-behaviour-scale.c Remove mentions of the FSF address 2010-03-01 12:56:10 +00:00
clutter-behaviour-scale.h Remove the last few fixed-point entry points 2009-06-19 16:38:35 +01:00
clutter-behaviour.c docs: Fix gtk-doc warnings 2010-04-22 16:39:18 +01:00
clutter-behaviour.h
clutter-bezier.c Remove mentions of the FSF address 2010-03-01 12:56:10 +00:00
clutter-bezier.h
clutter-bin-layout.c Fix some compiler warnings 2010-02-09 16:58:03 +00:00
clutter-bin-layout.h [layout, docs] Clean up BinLayout documentation 2009-10-14 11:31:29 +01:00
clutter-binding-pool.c Pass the interned string value to the binding callback 2009-11-17 21:32:17 +00:00
clutter-binding-pool.h
clutter-box-layout.c Add "homogeneous" mode to ClutterBoxLayout. 2010-03-25 09:41:54 +00:00
clutter-box-layout.h Add "homogeneous" mode to ClutterBoxLayout. 2010-03-25 09:41:54 +00:00
clutter-box.c box: Fix allow-none annotation 2010-03-03 10:47:42 +00:00
clutter-box.h docs: Documentation fixes 2010-03-02 11:12:32 +00:00
clutter-cairo-texture.c Revert "clutter-cairo-texture: Use the new cogl_pixel_buffer API" 2010-05-10 16:17:32 +01:00
clutter-cairo-texture.h Remove mentions of the FSF address 2010-03-01 12:56:10 +00:00
clutter-child-meta.c Remove mentions of the FSF address 2010-03-01 12:56:10 +00:00
clutter-child-meta.h [docs] Bring down the undocumented symbols to 2% 2009-03-16 15:00:55 +00:00
clutter-clone.c clone: Set :source as CONSTRUCT 2009-10-22 15:51:06 +01:00
clutter-clone.h [docs] Bring down the undocumented symbols to 2% 2009-03-16 15:00:55 +00:00
clutter-color.c clutter-color: Don't directly read the contents of GValue structs 2010-05-05 18:49:09 +01:00
clutter-color.h [misc] Update headers #endif comments 2009-06-29 21:37:02 +02:00
clutter-container.c container: use CLUTTER_IS_ACTOR on correct parameter 2010-05-05 11:31:14 +01:00
clutter-container.h docs: Documentation fixes 2010-03-02 11:12:32 +00:00
clutter-debug.h debug: Use G_UNLIKELY in the tests 2010-05-04 17:01:14 +01:00
clutter-deprecated.h Fix copy-and-paste errors in the deprecation macros 2009-07-21 09:22:38 +01:00
clutter-device-manager.c device: Impose per-backend DeviceManager 2010-02-17 17:46:48 +00:00
clutter-device-manager.h docs: Documentation fixes 2010-03-02 11:12:32 +00:00
clutter-enum-types.c.in Use g_once when registering enumeration types 2009-05-29 12:40:23 +01:00
clutter-enum-types.h.in
clutter-event.c Fix clutter_event_get_coords() for crossing events 2010-04-28 16:19:37 +01:00
clutter-event.h device: Allow updating devices from embedding toolkits 2010-02-17 18:21:50 +00:00
clutter-feature.c Emit a critical warning if features are not initialized 2010-03-18 14:15:33 +00:00
clutter-feature.h docs: Document SWAP_EVENTS feature flag 2010-02-15 19:03:37 +00:00
clutter-fixed-layout.c fixed layout: Store a back pointer to the Container 2010-02-24 12:25:53 +00:00
clutter-fixed-layout.h [layout, docs] Document FixedLayout 2009-10-14 11:31:29 +01:00
clutter-fixed.c Remove mentions of the FSF address 2010-03-01 12:56:10 +00:00
clutter-fixed.h [fixed] Remove ClutterFixed API 2009-03-10 12:38:04 +00:00
clutter-flow-layout.c flow-layout: Provide a preferred size 2010-03-02 15:11:27 +00:00
clutter-flow-layout.h [layout] Remove FlowLayout:wrap 2009-10-14 11:31:30 +01:00
clutter-frame-source.c Remove mentions of the FSF address 2010-03-01 12:56:10 +00:00
clutter-frame-source.h Count timeline frames using the FPS instead of an integer interval 2009-03-16 15:40:18 +00:00
clutter-group.c Remove mentions of the FSF address 2010-03-01 12:56:10 +00:00
clutter-group.h [group] avoid double evaluation of arguments in clutter_group_add 2009-04-08 18:19:46 +01:00
clutter-id-pool.c Remove mentions of the FSF address 2010-03-01 12:56:10 +00:00
clutter-id-pool.h
clutter-input-device.c device: When changing the stage, unset the pointer actor 2010-02-26 11:19:26 +00:00
clutter-input-device.h device: Allow updating devices from embedding toolkits 2010-02-17 18:21:50 +00:00
clutter-interval.c Conditionally use G_VALUE_COLLECT_INIT() macro 2010-02-25 10:22:36 +00:00
clutter-interval.h
clutter-json.h.in [json] Include only json-glib.h 2009-08-12 15:31:16 +01:00
clutter-keysyms-table.h
clutter-keysyms.h Remove mentions of the FSF address 2010-03-01 12:56:10 +00:00
clutter-layout-manager.c Conditionally use G_VALUE_COLLECT_INIT() macro 2010-02-25 10:22:36 +00:00
clutter-layout-manager.h layout: Let begin_animation() return the Alpha 2009-12-13 01:23:54 +00:00
clutter-layout-meta.c [layout] Add LayoutMeta 2009-10-14 11:31:26 +01:00
clutter-layout-meta.h layout: Add padding to LayoutMeta 2009-12-02 11:36:25 +00:00
clutter-list-model.c Remove mentions of the FSF address 2010-03-01 12:56:10 +00:00
clutter-list-model.h [list-model] Make ClutterListModel subclassable 2009-02-14 11:31:00 +00:00
clutter-main.c picking: Read the colour value using COGL_PIXEL_FORMAT_RGBA_8888_PRE 2010-04-21 11:34:04 +01:00
clutter-main.h Remove clutter_set_default_text_direction() 2009-12-07 19:00:55 +00:00
clutter-marshal.list Add ClutterDeviceManager 2010-01-20 00:38:07 +00:00
clutter-master-clock.c stage: Add sanity checks for get_pending_swaps() 2010-02-15 12:04:50 +00:00
clutter-master-clock.h ensure next iteration 2009-07-10 11:38:42 +01:00
clutter-media.c media: Add an API to specify which font should be used for subtitles 2010-01-11 13:04:16 +00:00
clutter-media.h docs: Documentation fixes 2010-03-02 11:12:32 +00:00
clutter-model-private.h [model] Add a private row mutator to ClutterModelIter 2009-05-05 20:18:28 +01:00
clutter-model.c model: Let get_n_columns() return a sane value 2010-03-17 17:14:08 +00:00
clutter-model.h Add more padding in Model and ModelIter classes 2009-05-20 16:06:09 +01:00
clutter-path.c docs: Use % for defines not # 2010-02-04 21:10:02 +00:00
clutter-path.h [path] MOVE_TO and LINE_TO only use a pair of coordinates 2009-10-06 10:43:41 +01:00
clutter-private.h Add error reporting for create_context() failures 2010-03-17 17:40:34 +00:00
clutter-profile.c profile: Fix the report generation 2010-04-22 17:52:13 +01:00
clutter-profile.h profiling: Allow limiting statisics just to picking 2010-01-08 20:19:50 +00:00
clutter-rectangle.c Remove mentions of the FSF address 2010-03-01 12:56:10 +00:00
clutter-rectangle.h [docs] Bring down the undocumented symbols to 2% 2009-03-16 15:00:55 +00:00
clutter-score.c Remove mentions of the FSF address 2010-03-01 12:56:10 +00:00
clutter-score.h [docs] Bring down the undocumented symbols to 2% 2009-03-16 15:00:55 +00:00
clutter-script-parser.c script: Add more comments and annotations 2010-03-18 20:20:09 +00:00
clutter-script-private.h Remove mentions of the FSF address 2010-03-01 12:56:10 +00:00
clutter-script.c Remove mentions of the FSF address 2010-03-01 12:56:10 +00:00
clutter-script.h [docs] Bring down the undocumented symbols to 2% 2009-03-16 15:00:55 +00:00
clutter-scriptable.c Remove mentions of the FSF address 2010-03-01 12:56:10 +00:00
clutter-scriptable.h docs: Documentation fixes 2010-03-02 11:12:32 +00:00
clutter-shader-types.c Remove mentions of the FSF address 2010-03-01 12:56:10 +00:00
clutter-shader-types.h [cogl] Remove the COGL{enum,int,uint} typedefs 2009-05-12 14:53:44 +01:00
clutter-shader.c Remove mentions of the FSF address 2010-03-01 12:56:10 +00:00
clutter-shader.h [shader] Remove deprecated set_uniform_1f() 2009-04-03 12:47:21 +01:00
clutter-stage-manager.c stage: Only clutter_stage_get_default() creates the default stage 2010-02-18 17:01:57 +00:00
clutter-stage-manager.h docs: Fix gtk-doc annotation for ClutterStageManageClass 2010-03-03 10:49:34 +00:00
clutter-stage-window.c Adds initial clipped redraw support to Clutter 2010-03-02 17:19:11 +00:00
clutter-stage-window.h Adds initial clipped redraw support to Clutter 2010-03-02 17:19:11 +00:00
clutter-stage.c Adds initial clipped redraw support to Clutter 2010-03-02 17:19:11 +00:00
clutter-stage.h [stage] Add set/get_minumum_size 2010-02-06 11:23:37 +00:00
clutter-text.c text: correct caching logic 2010-05-11 12:22:30 +01:00
clutter-text.h text: Add :font-description 2010-02-03 14:38:13 +00:00
clutter-texture.c Clean up the Texture private data structure 2010-04-26 16:27:15 +01:00
clutter-texture.h [cogl] Remove max_waste argument from Texture ctors 2009-05-23 19:35:19 +01:00
clutter-timeline.c Remove mentions of the FSF address 2010-03-01 12:56:10 +00:00
clutter-timeline.h Remove the last few fixed-point entry points 2009-06-19 16:38:35 +01:00
clutter-timeout-interval.c Whitespace fixes 2010-02-01 10:40:34 +00:00
clutter-timeout-interval.h Count timeline frames using the FPS instead of an integer interval 2009-03-16 15:40:18 +00:00
clutter-timeout-pool.c Remove mentions of the FSF address 2010-03-01 12:56:10 +00:00
clutter-timeout-pool.h Count timeline frames using the FPS instead of an integer interval 2009-03-16 15:40:18 +00:00
clutter-types.h Fix errors in keeping track of the stage bounding rectangle 2010-03-19 10:29:53 +00:00
clutter-units.c Remove mentions of the FSF address 2010-03-01 12:56:10 +00:00
clutter-units.h units: Cache the pixels value inside Units 2009-10-16 15:25:37 +01:00
clutter-util.c Remove mentions of the FSF address 2010-03-01 12:56:10 +00:00
clutter-util.h Deprecate clutter_util_next_p2() 2010-02-06 10:49:33 +00:00
clutter-version.h.in docs: Documentation fixes 2010-03-02 11:12:32 +00:00
clutter.h Remove mentions of the FSF address 2010-03-01 12:56:10 +00:00
Makefile.am build: Fixes out of tree builds 2010-03-01 15:25:45 +00:00