diff options
author | whunt@chromium.org <whunt@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-01-31 02:09:35 +0000 |
---|---|---|
committer | whunt@chromium.org <whunt@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-01-31 02:09:35 +0000 |
commit | 854bfc1371e7eb0eb1a3d686504a27e7d0a8e557 (patch) | |
tree | 67058acb87ab400c1871473ac37f44daefaf3338 /cc/picture_layer_tiling.cc | |
parent | cae769ccb848f62ed3d6d1ac1499038f55d7cce9 (diff) | |
download | chromium_src-854bfc1371e7eb0eb1a3d686504a27e7d0a8e557.zip chromium_src-854bfc1371e7eb0eb1a3d686504a27e7d0a8e557.tar.gz chromium_src-854bfc1371e7eb0eb1a3d686504a27e7d0a8e557.tar.bz2 |
A host of micro-optimizations and a refactor of TimeForBoundsToIntersect
I used perf to profile the compositor thread and addressed performance problems
with the top fuctions. The result is about a 2.5x performance boost.
(~1.3ms -> ~.5ms) on List of Pokemon for UpdateTilePriorities.
Most of the optimizations are inlining small functions. The refactor of
TimeForBoundsToIntersect also eliminates many unnecessary float-double
conversions.
BUG=172406
Review URL: https://chromiumcodereview.appspot.com/12084031
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@179770 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'cc/picture_layer_tiling.cc')
-rw-r--r-- | cc/picture_layer_tiling.cc | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/cc/picture_layer_tiling.cc b/cc/picture_layer_tiling.cc index 6e8e883..aa38776 100644 --- a/cc/picture_layer_tiling.cc +++ b/cc/picture_layer_tiling.cc @@ -4,6 +4,7 @@ #include "cc/picture_layer_tiling.h" +#include "base/debug/trace_event.h" #include "cc/math_util.h" #include "ui/gfx/point_conversions.h" #include "ui/gfx/rect_conversions.h" @@ -334,6 +335,7 @@ void PictureLayerTiling::UpdateTilePriorities( const gfx::Transform& last_screen_transform, const gfx::Transform& current_screen_transform, double time_delta) { + TRACE_EVENT0("cc", "PictureLayerTiling::UpdateTilePriorities"); gfx::Rect content_rect = ContentRect(); if (content_rect.IsEmpty()) return; @@ -400,12 +402,12 @@ void PictureLayerTiling::UpdateTilePriorities( last_scale, last_scale) + last_offset; - float time_to_visible_in_seconds = - TilePriority::TimeForBoundsToIntersect( - last_screen_rect, current_screen_rect, time_delta, view_rect); float distance_to_visible_in_pixels = TilePriority::manhattanDistance(current_screen_rect, view_rect); + float time_to_visible_in_seconds = + TilePriority::TimeForBoundsToIntersect( + last_screen_rect, current_screen_rect, time_delta, view_rect); TilePriority priority( resolution_, time_to_visible_in_seconds, @@ -437,11 +439,12 @@ void PictureLayerTiling::UpdateTilePriorities( gfx::RectF last_screen_rect = MathUtil::mapClippedRect( last_screen_transform, last_layer_content_rect); + float distance_to_visible_in_pixels = + TilePriority::manhattanDistance(current_screen_rect, view_rect); + float time_to_visible_in_seconds = TilePriority::TimeForBoundsToIntersect( last_screen_rect, current_screen_rect, time_delta, view_rect); - float distance_to_visible_in_pixels = - TilePriority::manhattanDistance(current_screen_rect, view_rect); TilePriority priority( resolution_, |