diff options
author | courage <courage@chromium.org> | 2014-09-10 12:35:02 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-09-10 19:37:02 +0000 |
commit | b84165fd869bf3d7e3637beb24412e39216ce29c (patch) | |
tree | 3283538bad5d755f66f738da63fb9eadcd944cf6 | |
parent | cffdd030d9ecd5e2ef50de941fca337a94c3b476 (diff) | |
download | chromium_src-b84165fd869bf3d7e3637beb24412e39216ce29c.zip chromium_src-b84165fd869bf3d7e3637beb24412e39216ce29c.tar.gz chromium_src-b84165fd869bf3d7e3637beb24412e39216ce29c.tar.bz2 |
Revert of cc: Add occlusion checker as a fixed view of occlusion tracker. (patchset #7 id:120001 of https://codereview.chromium.org/547723002/)
Reason for revert:
Broke linux GN build: http://build.chromium.org/p/chromium.linux/builders/Linux%20GN/builds/11591
[496/2225 | 35.477] CXX obj/ui/views/controls/views.focusable_border.o
[497/2225 | 35.633] CXX obj/ui/views/controls/views.glow_hover_controller.o
FAILED: /mnt/data/b/build/goma/gomacc ../../third_party/llvm-build/Release+Asserts/bin/clang++ -MMD -MF obj/cc/layers/cc_unittests.picture_layer_impl_unittest.o.d -DCHROMIUM_BUILD -DENABLE_NOTIFICATIONS -DENABLE_EGLIMAGE=1 -DENABLE_BACKGROUND=1 -DV8_DEPRECATION_WARNINGS -DCLD_VERSION=2 -DENABLE_MDNS=1 -DENABLE_PEPPER_CDMS -DENABLE_PLUGINS=1 -DENABLE_PRINTING=1 -DENABLE_FULL_PRINTING=1 -DENABLE_SPELLCHECK=1 -DUSE_UDEV -DTOOLKIT_VIEWS=1 -DUI_COMPOSITOR_IMAGE_TRANSPORT -DUSE_ASH=1 -DUSE_AURA=1 -DUSE_CAIRO=1 -DUSE_CLIPBOARD_AURAX11=1 -DUSE_DEFAULT_RENDER_THEME=1 -DUSE_GLIB=1 -DUSE_NSS=1 -DUSE_X11=1 -DUSE_XI2_MT=2 -DDISABLE_NACL -DENABLE_EXTENSIONS=1 -DENABLE_CONFIGURATION_POLICY -DENABLE_TASK_MANAGER=1 -DENABLE_THEMES=1 -DENABLE_CAPTIVE_PORTAL_DETECTION=1 -DENABLE_SESSION_SERVICE=1 -DENABLE_APP_LIST=1 -DENABLE_SETTINGS_APP=1 -DENABLE_MANAGED_USERS=1 -DENABLE_SERVICE_DISCOVERY=1 -DENABLE_AUTOFILL_DIALOG=1 -DENABLE_REMOTING=1 -DENABLE_GOOGLE_NOW=1 -DENABLE_ONE_CLICK_SIGNIN -DCR_CLANG_REVISION=214024 -D_FILE_OFFSET_BITS=64 -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -DNDEBUG -DGL_GLEXT_PROTOTYPES -DMEDIA_DISABLE_LIBVPX -DSK_SUPPORT_LEGACY_PUBLIC_IMAGEINFO_FIELDS -DSK_IGNORE_PROPER_FRACTIONAL_SCALING -DSK_SUPPORT_LEGACY_PICTURE_CLONE -DSK_IGNORE_ETC1_SUPPORT -DSK_IGNORE_GPU_DITHER -DSK_SUPPORT_LEGACY_IMAGECACHE_NAME -DSK_LEGACY_PICTURE_SIZE_API -DSK_LEGACY_PICTURE_DRAW_API -DSK_ENABLE_INST_COUNT=0 -DGR_GL_CUSTOM_SETUP_HEADER=\"GrGLConfig_chrome.h\" -DSK_ENABLE_LEGACY_API_ALIASING=1 -DSK_ATTR_DEPRECATED=SK_NOTHING_ARG1 -DGR_GL_IGNORE_ES3_MSAA=0 -DSK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT -DSK_SUPPORT_LEGACY_GETTOTALCLIP -DSK_SUPPORT_GPU=1 -DSK_USE_POSIX_THREADS -DGTEST_HAS_POSIX_RE=0 -DGTEST_LANG_CXX11=0 -DGTEST_HAS_RTTI=0 -DUNIT_TEST -I../.. -Igen -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I../../third_party/khronos -I../../gpu -Igen/ui/gl -I../../skia/config -I../../skia/ext -I../../third_party/skia/include/config -I../../third_party/skia/include/core -I../../third_party/skia/include/effects -I../../third_party/skia/include/images -I../../third_party/skia/include/lazy -I../../third_party/skia/include/pathops -I../../third_party/skia/include/pdf -I../../third_party/skia/include/pipe -I../../third_party/skia/include/ports -I../../third_party/skia/include/utils -I../../third_party/skia/src/core -I../../third_party/skia/src/image -I../../third_party/skia/src/opts -I../../third_party/skia/src/ports -I../../third_party/skia/src/sfnt -I../../third_party/skia/src/utils -I../../third_party/skia/src/lazy -I../../third_party/skia/include/gpu -I../../third_party/skia/src/gpu -I../../testing/gtest/include -I../../testing/gmock/include -fno-strict-aliasing -fstack-protector --param=ssp-buffer-size=4 -m64 -funwind-tables -fPIC -pipe -pthread -fcolor-diagnostics -Wall -Wextra -Wsign-compare -Wendif-labels -Werror -Wno-missing-field-initializers -Wno-unused-parameter -Wno-c++11-narrowing -Wno-char-subscripts -Wno-covered-switch-default -Wno-deprecated-register -Wno-unused-function -fvisibility=hidden -Xclang -load -Xclang ../../third_party/llvm-build/Release+Asserts/lib/libFindBadConstructs.so -Xclang -add-plugin -Xclang find-bad-constructs -Wheader-hygiene -Wstring-conversion -fno-ident -fdata-sections -ffunction-sections -O2 -g2 -fno-threadsafe-statics -fvisibility-inlines-hidden -std=gnu++11 -Wno-reserved-user-defined-literal -fno-rtti -fno-exceptions -c ../../cc/layers/picture_layer_impl_unittest.cc -o obj/cc/layers/cc_unittests.picture_layer_impl_unittest.o
../../cc/layers/picture_layer_impl_unittest.cc:2578:31:error: reference to type 'const cc::Occlusion' could not bind to an rvalue of type 'long'
pending_layer_->UpdateTiles(NULL);
^~~~
/mnt/data/b/build/slave/Linux_GN/build/src/third_party/llvm-build/Release+Asserts/bin/../lib/clang/3.5.0/include/stddef.h:96:18: note: expanded from macro 'NULL'
# define NULL __null
^~~~~~
../../cc/layers/picture_layer_impl.h:113:24: note: passing argument to parameter 'occlusion_in_content_space' here
const Occlusion& occlusion_in_content_space) OVERRIDE;
^
../../cc/layers/picture_layer_impl_unittest.cc:2608:31:error: reference to type 'const cc::Occlusion' could not bind to an rvalue of type 'long'
pending_layer_->UpdateTiles(NULL);
^~~~
/mnt/data/b/build/slave/Linux_GN/build/src/third_party/llvm-build/Release+Asserts/bin/../lib/clang/3.5.0/include/stddef.h:96:18: note: expanded from macro 'NULL'
# define NULL __null
^~~~~~
../../cc/layers/picture_layer_impl.h:113:24: note: passing argument to parameter 'occlusion_in_content_space' here
const Occlusion& occlusion_in_content_space) OVERRIDE;
^
2 errors generated.
ninja: build stopped: subcommand failed.
Original issue's description:
> cc: Add occlusion checker as a fixed view of occlusion tracker.
>
> This patch adds an occlusion checker to get the state of
> occlusion tracker for permanent checks. That is, occlusion
> checker does not have to be queried during a layer walk.
>
> BUG=410932
> R=danakj
>
> Committed: https://crrev.com/1af780529157c94a9e0f05bcf478543b85714f6b
> Cr-Commit-Position: refs/heads/master@{#294205}
TBR=danakj@chromium.org,vmpstr@chromium.org
NOTREECHECKS=true
NOTRY=true
BUG=410932
Review URL: https://codereview.chromium.org/551463005
Cr-Commit-Position: refs/heads/master@{#294209}
-rw-r--r-- | cc/BUILD.gn | 2 | ||||
-rw-r--r-- | cc/cc.gyp | 2 | ||||
-rw-r--r-- | cc/layers/layer_impl.h | 4 | ||||
-rw-r--r-- | cc/layers/picture_image_layer_impl_unittest.cc | 2 | ||||
-rw-r--r-- | cc/layers/picture_layer_impl.cc | 18 | ||||
-rw-r--r-- | cc/layers/picture_layer_impl.h | 5 | ||||
-rw-r--r-- | cc/layers/picture_layer_impl_unittest.cc | 16 | ||||
-rw-r--r-- | cc/resources/picture_layer_tiling.cc | 19 | ||||
-rw-r--r-- | cc/resources/picture_layer_tiling.h | 16 | ||||
-rw-r--r-- | cc/resources/picture_layer_tiling_perftest.cc | 26 | ||||
-rw-r--r-- | cc/resources/picture_layer_tiling_unittest.cc | 187 | ||||
-rw-r--r-- | cc/resources/tile_manager_perftest.cc | 10 | ||||
-rw-r--r-- | cc/resources/tile_manager_unittest.cc | 96 | ||||
-rw-r--r-- | cc/trees/layer_tree_impl.cc | 11 | ||||
-rw-r--r-- | cc/trees/occlusion.cc | 48 | ||||
-rw-r--r-- | cc/trees/occlusion.h | 36 | ||||
-rw-r--r-- | cc/trees/occlusion_tracker.cc | 10 | ||||
-rw-r--r-- | cc/trees/occlusion_tracker.h | 6 | ||||
-rw-r--r-- | cc/trees/occlusion_tracker_unittest.cc | 5 |
19 files changed, 294 insertions, 225 deletions
diff --git a/cc/BUILD.gn b/cc/BUILD.gn index 6d70f46..300150f 100644 --- a/cc/BUILD.gn +++ b/cc/BUILD.gn @@ -452,8 +452,6 @@ component("cc") { "trees/layer_tree_impl.h", "trees/layer_tree_settings.cc", "trees/layer_tree_settings.h", - "trees/occlusion.cc", - "trees/occlusion.h", "trees/occlusion_tracker.cc", "trees/occlusion_tracker.h", "trees/proxy.cc", @@ -481,8 +481,6 @@ 'trees/layer_tree_impl.h', 'trees/layer_tree_settings.cc', 'trees/layer_tree_settings.h', - 'trees/occlusion.cc', - 'trees/occlusion.h', 'trees/occlusion_tracker.cc', 'trees/occlusion_tracker.h', 'trees/proxy.cc', diff --git a/cc/layers/layer_impl.h b/cc/layers/layer_impl.h index 65143ab..c10710c 100644 --- a/cc/layers/layer_impl.h +++ b/cc/layers/layer_impl.h @@ -49,7 +49,6 @@ namespace cc { class LayerTreeHostImpl; class LayerTreeImpl; class MicroBenchmarkImpl; -class Occlusion; template <typename LayerType> class OcclusionTracker; class RenderPass; @@ -205,7 +204,8 @@ class CC_EXPORT LayerImpl : public LayerAnimationValueObserver, virtual RenderPassId FirstContributingRenderPassId() const; virtual RenderPassId NextContributingRenderPassId(RenderPassId id) const; - virtual void UpdateTiles(const Occlusion& occlusion_in_layer_space) {} + virtual void UpdateTiles( + const OcclusionTracker<LayerImpl>* occlusion_tracker) {} virtual void NotifyTileStateChanged(const Tile* tile) {} virtual ScrollbarLayerImplBase* ToScrollbarLayer(); diff --git a/cc/layers/picture_image_layer_impl_unittest.cc b/cc/layers/picture_image_layer_impl_unittest.cc index f22b6cd..48b4d7b 100644 --- a/cc/layers/picture_image_layer_impl_unittest.cc +++ b/cc/layers/picture_image_layer_impl_unittest.cc @@ -84,7 +84,7 @@ class PictureImageLayerImplTest : public testing::Test { maximum_animation_contents_scale; layer->draw_properties().screen_space_transform_is_animating = animating_transform_to_screen; - layer->UpdateTiles(Occlusion()); + layer->UpdateTiles(NULL); } protected: diff --git a/cc/layers/picture_layer_impl.cc b/cc/layers/picture_layer_impl.cc index 1205e07..05dab30 100644 --- a/cc/layers/picture_layer_impl.cc +++ b/cc/layers/picture_layer_impl.cc @@ -420,11 +420,17 @@ void PictureLayerImpl::AppendQuads( } void PictureLayerImpl::UpdateTiles( - const Occlusion& occlusion_in_content_space) { + const OcclusionTracker<LayerImpl>* occlusion_tracker) { TRACE_EVENT0("cc", "PictureLayerImpl::UpdateTiles"); DoPostCommitInitializationIfNeeded(); + // TODO(danakj): We should always get an occlusion tracker when we are using + // occlusion, so update this check when we don't use a pending tree in the + // browser compositor. + DCHECK(!occlusion_tracker || + layer_tree_impl()->settings().use_occlusion_for_tile_prioritization); + visible_rect_for_tile_priority_ = visible_content_rect(); viewport_rect_for_tile_priority_ = layer_tree_impl()->ViewportRectForTilePriority(); @@ -459,14 +465,14 @@ void PictureLayerImpl::UpdateTiles( should_update_tile_priorities_ = true; - UpdateTilePriorities(occlusion_in_content_space); + UpdateTilePriorities(occlusion_tracker); if (layer_tree_impl()->IsPendingTree()) MarkVisibleResourcesAsRequired(); } void PictureLayerImpl::UpdateTilePriorities( - const Occlusion& occlusion_in_content_space) { + const OcclusionTracker<LayerImpl>* occlusion_tracker) { TRACE_EVENT0("cc", "PictureLayerImpl::UpdateTilePriorities"); double current_frame_time_in_seconds = @@ -496,7 +502,9 @@ void PictureLayerImpl::UpdateTilePriorities( visible_layer_rect, ideal_contents_scale_, current_frame_time_in_seconds, - occlusion_in_content_space); + occlusion_tracker, + render_target(), + draw_transform()); } // Tile priorities were modified. @@ -748,7 +756,7 @@ void PictureLayerImpl::SyncTiling( // when we stop using the pending tree in the browser compositor. If we want // to support occlusion tracking here, we need to dirty the draw properties // or save occlusion as a draw property. - UpdateTilePriorities(Occlusion()); + UpdateTilePriorities(NULL); } } diff --git a/cc/layers/picture_layer_impl.h b/cc/layers/picture_layer_impl.h index c7d987f..fd4fe0a 100644 --- a/cc/layers/picture_layer_impl.h +++ b/cc/layers/picture_layer_impl.h @@ -110,7 +110,7 @@ class CC_EXPORT PictureLayerImpl const OcclusionTracker<LayerImpl>& occlusion_tracker, AppendQuadsData* append_quads_data) OVERRIDE; virtual void UpdateTiles( - const Occlusion& occlusion_in_content_space) OVERRIDE; + const OcclusionTracker<LayerImpl>* occlusion_tracker) OVERRIDE; virtual void NotifyTileStateChanged(const Tile* tile) OVERRIDE; virtual void DidBecomeActive() OVERRIDE; virtual void DidBeginTracing() OVERRIDE; @@ -160,7 +160,8 @@ class CC_EXPORT PictureLayerImpl void RemoveAllTilings(); void SyncFromActiveLayer(const PictureLayerImpl* other); void AddTilingsForRasterScale(); - void UpdateTilePriorities(const Occlusion& occlusion_in_content_space); + void UpdateTilePriorities( + const OcclusionTracker<LayerImpl>* occlusion_tracker); virtual bool ShouldAdjustRasterScale() const; virtual void RecalculateRasterScales(); void CleanUpTilingsOnActiveLayer( diff --git a/cc/layers/picture_layer_impl_unittest.cc b/cc/layers/picture_layer_impl_unittest.cc index 7142f1d..44662d7 100644 --- a/cc/layers/picture_layer_impl_unittest.cc +++ b/cc/layers/picture_layer_impl_unittest.cc @@ -160,7 +160,7 @@ class PictureLayerImplTest : public testing::Test { maximum_animation_contents_scale; layer->draw_properties().screen_space_transform_is_animating = animating_transform_to_screen; - layer->UpdateTiles(Occlusion()); + layer->UpdateTiles(NULL); } static void VerifyAllTilesExistAndHavePile( const PictureLayerTiling* tiling, @@ -348,7 +348,7 @@ TEST_F(PictureLayerImplTest, ExternalViewportRectForPrioritizingTiles) { resourceless_software_draw); active_layer_->draw_properties().visible_content_rect = viewport; active_layer_->draw_properties().screen_space_transform = transform; - active_layer_->UpdateTiles(Occlusion()); + active_layer_->UpdateTiles(NULL); gfx::Rect viewport_rect_for_tile_priority_in_view_space = viewport_rect_for_tile_priority; @@ -386,7 +386,7 @@ TEST_F(PictureLayerImplTest, ExternalViewportRectForPrioritizingTiles) { resourceless_software_draw); active_layer_->draw_properties().visible_content_rect = viewport; active_layer_->draw_properties().screen_space_transform = transform; - active_layer_->UpdateTiles(Occlusion()); + active_layer_->UpdateTiles(NULL); gfx::Transform screen_to_view(gfx::Transform::kSkipInitialization); bool success = transform_for_tile_priority.GetInverse(&screen_to_view); @@ -447,7 +447,7 @@ TEST_F(PictureLayerImplTest, resourceless_software_draw); active_layer_->draw_properties().visible_content_rect = viewport; active_layer_->draw_properties().screen_space_transform = transform; - active_layer_->UpdateTiles(Occlusion()); + active_layer_->UpdateTiles(NULL); gfx::Rect visible_rect_for_tile_priority = active_layer_->visible_rect_for_tile_priority(); @@ -475,7 +475,7 @@ TEST_F(PictureLayerImplTest, viewport, transform, resourceless_software_draw); - active_layer_->UpdateTiles(Occlusion()); + active_layer_->UpdateTiles(NULL); visible_rect_for_tile_priority = gfx::ScaleToEnclosingRect(visible_rect_for_tile_priority, 2); @@ -1508,7 +1508,7 @@ TEST_F(PictureLayerImplTest, TileOutsideOfViewportForTilePriorityNotRequired) { time_ticks += base::TimeDelta::FromMilliseconds(200); host_impl_.SetCurrentBeginFrameArgs( CreateBeginFrameArgsForTesting(time_ticks)); - pending_layer_->UpdateTiles(Occlusion()); + pending_layer_->UpdateTiles(NULL); pending_layer_->MarkVisibleResourcesAsRequired(); @@ -3169,7 +3169,7 @@ TEST_F(NoLowResPictureLayerImplTest, resourceless_software_draw); active_layer_->draw_properties().visible_content_rect = viewport; active_layer_->draw_properties().screen_space_transform = transform; - active_layer_->UpdateTiles(Occlusion()); + active_layer_->UpdateTiles(NULL); gfx::Rect visible_rect_for_tile_priority = active_layer_->visible_rect_for_tile_priority(); @@ -3197,7 +3197,7 @@ TEST_F(NoLowResPictureLayerImplTest, viewport, transform, resourceless_software_draw); - active_layer_->UpdateTiles(Occlusion()); + active_layer_->UpdateTiles(NULL); visible_rect_for_tile_priority = gfx::ScaleToEnclosingRect(visible_rect_for_tile_priority, 2); diff --git a/cc/resources/picture_layer_tiling.cc b/cc/resources/picture_layer_tiling.cc index 0229879..0d50658 100644 --- a/cc/resources/picture_layer_tiling.cc +++ b/cc/resources/picture_layer_tiling.cc @@ -15,6 +15,7 @@ #include "cc/base/math_util.h" #include "cc/resources/tile.h" #include "cc/resources/tile_priority.h" +#include "cc/trees/occlusion_tracker.h" #include "ui/gfx/point_conversions.h" #include "ui/gfx/rect_conversions.h" #include "ui/gfx/safe_integer_conversions.h" @@ -539,7 +540,9 @@ void PictureLayerTiling::UpdateTilePriorities( const gfx::Rect& visible_layer_rect, float ideal_contents_scale, double current_frame_time_in_seconds, - const Occlusion& occlusion_in_layer_space) { + const OcclusionTracker<LayerImpl>* occlusion_tracker, + const LayerImpl* render_target, + const gfx::Transform& draw_transform) { if (!NeedsUpdateForFrameAtTime(current_frame_time_in_seconds)) { // This should never be zero for the purposes of has_ever_been_updated(). DCHECK_NE(current_frame_time_in_seconds, 0.0); @@ -602,10 +605,16 @@ void PictureLayerTiling::UpdateTilePriorities( tile->SetPriority(tree, now_priority); // Set whether tile is occluded or not. - gfx::Rect tile_query_rect = ScaleToEnclosingRect( - IntersectRects(tile->content_rect(), visible_rect_in_content_space), - 1.0f / contents_scale_); - bool is_occluded = occlusion_in_layer_space.IsOccluded(tile_query_rect); + bool is_occluded = false; + if (occlusion_tracker) { + gfx::Rect tile_query_rect = ScaleToEnclosingRect( + IntersectRects(tile->content_rect(), visible_rect_in_content_space), + 1.0f / contents_scale_); + // TODO(vmpstr): Remove render_target and draw_transform from the + // parameters so they can be hidden from the tiling. + is_occluded = occlusion_tracker->Occluded( + render_target, tile_query_rect, draw_transform); + } tile->set_is_occluded(tree, is_occluded); } diff --git a/cc/resources/picture_layer_tiling.h b/cc/resources/picture_layer_tiling.h index e3fffee..35bbf94 100644 --- a/cc/resources/picture_layer_tiling.h +++ b/cc/resources/picture_layer_tiling.h @@ -17,7 +17,6 @@ #include "cc/base/tiling_data.h" #include "cc/resources/tile.h" #include "cc/resources/tile_priority.h" -#include "cc/trees/occlusion.h" #include "ui/gfx/rect.h" namespace base { @@ -28,6 +27,8 @@ class TracedValue; namespace cc { +template <typename LayerType> +class OcclusionTracker; class PictureLayerTiling; class PicturePileImpl; @@ -236,11 +237,14 @@ class CC_EXPORT PictureLayerTiling { void Reset(); - void UpdateTilePriorities(WhichTree tree, - const gfx::Rect& visible_layer_rect, - float ideal_contents_scale, - double current_frame_time_in_seconds, - const Occlusion& occlusion_in_layer_space); + void UpdateTilePriorities( + WhichTree tree, + const gfx::Rect& visible_layer_rect, + float ideal_contents_scale, + double current_frame_time_in_seconds, + const OcclusionTracker<LayerImpl>* occlusion_tracker, + const LayerImpl* render_target, + const gfx::Transform& draw_transform); // Copies the src_tree priority into the dst_tree priority for all tiles. // The src_tree priority is reset to the lowest priority possible. This diff --git a/cc/resources/picture_layer_tiling_perftest.cc b/cc/resources/picture_layer_tiling_perftest.cc index f1b462f..00338ab 100644 --- a/cc/resources/picture_layer_tiling_perftest.cc +++ b/cc/resources/picture_layer_tiling_perftest.cc @@ -74,8 +74,13 @@ class PictureLayerTilingPerfTest : public testing::Test { timer_.Reset(); do { - picture_layer_tiling_->UpdateTilePriorities( - PENDING_TREE, viewport_rect, 1.f, timer_.NumLaps() + 1, Occlusion()); + picture_layer_tiling_->UpdateTilePriorities(PENDING_TREE, + viewport_rect, + 1.f, + timer_.NumLaps() + 1, + NULL, + NULL, + gfx::Transform()); timer_.NextLap(); } while (!timer_.HasTimeLimitExpired()); @@ -99,8 +104,13 @@ class PictureLayerTilingPerfTest : public testing::Test { timer_.Reset(); do { - picture_layer_tiling_->UpdateTilePriorities( - PENDING_TREE, viewport_rect, 1.f, timer_.NumLaps() + 1, Occlusion()); + picture_layer_tiling_->UpdateTilePriorities(PENDING_TREE, + viewport_rect, + 1.f, + timer_.NumLaps() + 1, + NULL, + NULL, + gfx::Transform()); viewport_rect = gfx::Rect(viewport_rect.x() + xoffsets[offsetIndex], viewport_rect.y() + yoffsets[offsetIndex], @@ -129,7 +139,7 @@ class PictureLayerTilingPerfTest : public testing::Test { PictureLayerTiling::Create(1, bounds, &picture_layer_tiling_client_); picture_layer_tiling_client_.set_tree(ACTIVE_TREE); picture_layer_tiling_->UpdateTilePriorities( - ACTIVE_TREE, viewport, 1.0f, 1.0, Occlusion()); + ACTIVE_TREE, viewport, 1.0f, 1.0, NULL, NULL, gfx::Transform()); timer_.Reset(); do { @@ -154,7 +164,7 @@ class PictureLayerTilingPerfTest : public testing::Test { PictureLayerTiling::Create(1, bounds, &picture_layer_tiling_client_); picture_layer_tiling_client_.set_tree(ACTIVE_TREE); picture_layer_tiling_->UpdateTilePriorities( - ACTIVE_TREE, viewport, 1.0f, 1.0, Occlusion()); + ACTIVE_TREE, viewport, 1.0f, 1.0, NULL, NULL, gfx::Transform()); timer_.Reset(); do { @@ -184,7 +194,7 @@ class PictureLayerTilingPerfTest : public testing::Test { PictureLayerTiling::Create(1, bounds, &picture_layer_tiling_client_); picture_layer_tiling_client_.set_tree(ACTIVE_TREE); picture_layer_tiling_->UpdateTilePriorities( - ACTIVE_TREE, viewport, 1.0f, 1.0, Occlusion()); + ACTIVE_TREE, viewport, 1.0f, 1.0, NULL, NULL, gfx::Transform()); timer_.Reset(); TreePriority priorities[] = {SAME_PRIORITY_FOR_BOTH_TREES, @@ -216,7 +226,7 @@ class PictureLayerTilingPerfTest : public testing::Test { PictureLayerTiling::Create(1, bounds, &picture_layer_tiling_client_); picture_layer_tiling_client_.set_tree(ACTIVE_TREE); picture_layer_tiling_->UpdateTilePriorities( - ACTIVE_TREE, viewport, 1.0f, 1.0, Occlusion()); + ACTIVE_TREE, viewport, 1.0f, 1.0, NULL, NULL, gfx::Transform()); TreePriority priorities[] = {SAME_PRIORITY_FOR_BOTH_TREES, SMOOTHNESS_TAKES_PRIORITY, diff --git a/cc/resources/picture_layer_tiling_unittest.cc b/cc/resources/picture_layer_tiling_unittest.cc index e64191d..0795e11 100644 --- a/cc/resources/picture_layer_tiling_unittest.cc +++ b/cc/resources/picture_layer_tiling_unittest.cc @@ -44,7 +44,9 @@ static void UpdateAllTilePriorities(PictureLayerTilingSet* set, visible_layer_rect, layer_contents_scale, current_frame_time_in_seconds, - Occlusion()); + NULL, + NULL, + gfx::Transform()); } } @@ -538,7 +540,8 @@ TEST(PictureLayerTilingTest, SkewportLimits) { client.SetTileSize(gfx::Size(100, 100)); tiling = TestablePictureLayerTiling::Create(1.0f, layer_bounds, &client); - tiling->UpdateTilePriorities(ACTIVE_TREE, viewport, 1.f, 1.0, Occlusion()); + tiling->UpdateTilePriorities( + ACTIVE_TREE, viewport, 1.f, 1.0, NULL, NULL, gfx::Transform()); // Move viewport down 50 pixels in 0.5 seconds. gfx::Rect down_skewport = @@ -604,7 +607,8 @@ TEST(PictureLayerTilingTest, ComputeSkewport) { client.set_tree(ACTIVE_TREE); tiling = TestablePictureLayerTiling::Create(1.0f, layer_bounds, &client); - tiling->UpdateTilePriorities(ACTIVE_TREE, viewport, 1.f, 1.0, Occlusion()); + tiling->UpdateTilePriorities( + ACTIVE_TREE, viewport, 1.f, 1.0, NULL, NULL, gfx::Transform()); // Move viewport down 50 pixels in 0.5 seconds. gfx::Rect down_skewport = @@ -671,7 +675,8 @@ TEST(PictureLayerTilingTest, ViewportDistanceWithScale) { gfx::Rect viewport_in_content_space = gfx::ToEnclosedRect(gfx::ScaleRect(viewport, 0.25f)); - tiling->UpdateTilePriorities(ACTIVE_TREE, viewport, 1.f, 1.0, Occlusion()); + tiling->UpdateTilePriorities( + ACTIVE_TREE, viewport, 1.f, 1.0, NULL, NULL, gfx::Transform()); gfx::Rect soon_rect = viewport; soon_rect.Inset(-312.f, -312.f, -312.f, -312.f); @@ -755,7 +760,8 @@ TEST(PictureLayerTilingTest, ViewportDistanceWithScale) { EXPECT_EQ(25, skewport.width()); EXPECT_EQ(35, skewport.height()); - tiling->UpdateTilePriorities(ACTIVE_TREE, viewport, 1.f, 2.0, Occlusion()); + tiling->UpdateTilePriorities( + ACTIVE_TREE, viewport, 1.f, 2.0, NULL, NULL, gfx::Transform()); have_now = false; have_eventually = false; @@ -806,7 +812,8 @@ TEST(PictureLayerTilingTest, ViewportDistanceWithScale) { EXPECT_FLOAT_EQ(4.f, priority.distance_to_visible); // Change the underlying layer scale. - tiling->UpdateTilePriorities(ACTIVE_TREE, viewport, 2.0f, 3.0, Occlusion()); + tiling->UpdateTilePriorities( + ACTIVE_TREE, viewport, 2.0f, 3.0, NULL, NULL, gfx::Transform()); priority = tiling->TileAt(5, 1)->priority(ACTIVE_TREE); EXPECT_FLOAT_EQ(136.f, priority.distance_to_visible); @@ -819,7 +826,8 @@ TEST(PictureLayerTilingTest, ViewportDistanceWithScale) { // Test additional scales. tiling = TestablePictureLayerTiling::Create(0.2f, layer_bounds, &client); - tiling->UpdateTilePriorities(ACTIVE_TREE, viewport, 1.0f, 4.0, Occlusion()); + tiling->UpdateTilePriorities( + ACTIVE_TREE, viewport, 1.0f, 4.0, NULL, NULL, gfx::Transform()); priority = tiling->TileAt(5, 1)->priority(ACTIVE_TREE); EXPECT_FLOAT_EQ(110.f, priority.distance_to_visible); @@ -830,7 +838,8 @@ TEST(PictureLayerTilingTest, ViewportDistanceWithScale) { priority = tiling->TileAt(3, 4)->priority(ACTIVE_TREE); EXPECT_FLOAT_EQ(60.f, priority.distance_to_visible); - tiling->UpdateTilePriorities(ACTIVE_TREE, viewport, 0.5f, 5.0, Occlusion()); + tiling->UpdateTilePriorities( + ACTIVE_TREE, viewport, 0.5f, 5.0, NULL, NULL, gfx::Transform()); priority = tiling->TileAt(5, 1)->priority(ACTIVE_TREE); EXPECT_FLOAT_EQ(55.f, priority.distance_to_visible); @@ -1078,7 +1087,8 @@ TEST(PictureLayerTilingTest, TilingRasterTileIteratorStaticViewport) { client.set_tree(ACTIVE_TREE); tiling = TestablePictureLayerTiling::Create(1.0f, layer_bounds, &client); - tiling->UpdateTilePriorities(ACTIVE_TREE, viewport, 1.0f, 1.0, Occlusion()); + tiling->UpdateTilePriorities( + ACTIVE_TREE, viewport, 1.0f, 1.0, NULL, NULL, gfx::Transform()); PictureLayerTiling::TilingRasterTileIterator empty_iterator; EXPECT_FALSE(empty_iterator); @@ -1186,9 +1196,10 @@ TEST(PictureLayerTilingTest, TilingRasterTileIteratorMovingViewport) { client.set_tree(ACTIVE_TREE); tiling = TestablePictureLayerTiling::Create(1.f, layer_bounds, &client); - tiling->UpdateTilePriorities(ACTIVE_TREE, viewport, 1.0f, 1.0, Occlusion()); tiling->UpdateTilePriorities( - ACTIVE_TREE, moved_viewport, 1.0f, 2.0, Occlusion()); + ACTIVE_TREE, viewport, 1.0f, 1.0, NULL, NULL, gfx::Transform()); + tiling->UpdateTilePriorities( + ACTIVE_TREE, moved_viewport, 1.0f, 2.0, NULL, NULL, gfx::Transform()); gfx::Rect soon_rect = moved_viewport; soon_rect.Inset(-312.f, -312.f, -312.f, -312.f); @@ -1261,7 +1272,8 @@ TEST(PictureLayerTilingTest, TilingEvictionTileIteratorStaticViewport) { client.set_tree(ACTIVE_TREE); tiling = TestablePictureLayerTiling::Create(1.0f, layer_bounds, &client); - tiling->UpdateTilePriorities(ACTIVE_TREE, viewport, 1.0f, 1.0, Occlusion()); + tiling->UpdateTilePriorities( + ACTIVE_TREE, viewport, 1.0f, 1.0, NULL, NULL, gfx::Transform()); PictureLayerTiling::TilingRasterTileIterator empty_iterator; EXPECT_FALSE(empty_iterator); @@ -1339,15 +1351,19 @@ TEST_F(PictureLayerTilingIteratorTest, TilesExist) { gfx::Rect(layer_bounds), // visible content rect 1.f, // current contents scale 1.0, // current frame time - Occlusion()); + NULL, // occlusion tracker + NULL, // render target + gfx::Transform()); // draw transform VerifyTiles(1.f, gfx::Rect(layer_bounds), base::Bind(&TileExists, true)); // Make the viewport rect empty. All tiles are killed and become zombies. tiling_->UpdateTilePriorities(ACTIVE_TREE, - gfx::Rect(), // visible content rect - 1.f, // current contents scale - 2.0, // current frame time - Occlusion()); + gfx::Rect(), // visible content rect + 1.f, // current contents scale + 2.0, // current frame time + NULL, // occlusion tracker + NULL, // render target + gfx::Transform()); // draw transform VerifyTiles(1.f, gfx::Rect(layer_bounds), base::Bind(&TileExists, false)); } @@ -1365,15 +1381,19 @@ TEST_F(PictureLayerTilingIteratorTest, TilesExistGiantViewport) { gfx::Rect(layer_bounds), // visible content rect 1.f, // current contents scale 1.0, // current frame time - Occlusion()); + NULL, // occlusion tracker + NULL, // render target + gfx::Transform()); // draw transform VerifyTiles(1.f, gfx::Rect(layer_bounds), base::Bind(&TileExists, true)); // If the visible content rect is empty, it should still have live tiles. tiling_->UpdateTilePriorities(ACTIVE_TREE, - giant_rect, // visible content rect - 1.f, // current contents scale - 2.0, // current frame time - Occlusion()); + giant_rect, // visible content rect + 1.f, // current contents scale + 2.0, // current frame time + NULL, // occlusion tracker + NULL, // render target + gfx::Transform()); // draw transform VerifyTiles(1.f, gfx::Rect(layer_bounds), base::Bind(&TileExists, true)); } @@ -1390,10 +1410,12 @@ TEST_F(PictureLayerTilingIteratorTest, TilesExistOutsideViewport) { client_.set_tree(ACTIVE_TREE); tiling_->UpdateTilePriorities(ACTIVE_TREE, - viewport_rect, // visible content rect - 1.f, // current contents scale - 1.0, // current frame time - Occlusion()); + viewport_rect, // visible content rect + 1.f, // current contents scale + 1.0, // current frame time + NULL, // occlusion tracker + NULL, // render target + gfx::Transform()); // draw transform VerifyTiles(1.f, gfx::Rect(layer_bounds), base::Bind(&TileExists, true)); } @@ -1420,10 +1442,12 @@ TEST_F(PictureLayerTilingIteratorTest, client_.set_tree(ACTIVE_TREE); set_max_tiles_for_interest_area(1); tiling_->UpdateTilePriorities(ACTIVE_TREE, - visible_rect, // visible content rect - 1.f, // current contents scale - 1.0, // current frame time - Occlusion()); + visible_rect, // visible content rect + 1.f, // current contents scale + 1.0, // current frame time + NULL, // occlusion tracker + NULL, // render target + gfx::Transform()); // draw transform VerifyTiles(1.f, gfx::Rect(layer_bounds), base::Bind(&TilesIntersectingRectExist, visible_rect, true)); @@ -1509,7 +1533,9 @@ TEST(UpdateTilePrioritiesTest, VisibleTiles) { viewport_in_layer_space, current_layer_contents_scale, current_frame_time_in_seconds, - Occlusion()); + NULL, // occlusion tracker + NULL, // render target + gfx::Transform()); // draw transform ASSERT_TRUE(tiling->TileAt(0, 0)); ASSERT_TRUE(tiling->TileAt(0, 1)); @@ -1564,7 +1590,9 @@ TEST(UpdateTilePrioritiesTest, OffscreenTiles) { viewport_in_layer_space, current_layer_contents_scale, current_frame_time_in_seconds, - Occlusion()); + NULL, // occlusion tracker + NULL, // render target + gfx::Transform()); // draw transform ASSERT_TRUE(tiling->TileAt(0, 0)); ASSERT_TRUE(tiling->TileAt(0, 1)); @@ -1629,7 +1657,9 @@ TEST(UpdateTilePrioritiesTest, PartiallyOffscreenLayer) { viewport_in_layer_space, current_layer_contents_scale, current_frame_time_in_seconds, - Occlusion()); + NULL, // occlusion tracker + NULL, // render target + gfx::Transform()); // draw transform ASSERT_TRUE(tiling->TileAt(0, 0)); ASSERT_TRUE(tiling->TileAt(0, 1)); @@ -1688,7 +1718,9 @@ TEST(UpdateTilePrioritiesTest, PartiallyOffscreenRotatedLayer) { viewport_in_layer_space, current_layer_contents_scale, current_frame_time_in_seconds, - Occlusion()); + NULL, // occlusion tracker + NULL, // render target + gfx::Transform()); // draw transform ASSERT_TRUE(tiling->TileAt(0, 0)); ASSERT_TRUE(tiling->TileAt(0, 1)); @@ -1771,7 +1803,9 @@ TEST(UpdateTilePrioritiesTest, PerspectiveLayer) { viewport_in_layer_space, current_layer_contents_scale, current_frame_time_in_seconds, - Occlusion()); + NULL, // occlusion tracker + NULL, // render target + gfx::Transform()); // draw transform ASSERT_TRUE(tiling->TileAt(0, 0)); ASSERT_TRUE(tiling->TileAt(0, 1)); @@ -1864,7 +1898,9 @@ TEST(UpdateTilePrioritiesTest, PerspectiveLayerClippedByW) { viewport_in_layer_space, current_layer_contents_scale, current_frame_time_in_seconds, - Occlusion()); + NULL, // occlusion tracker + NULL, // render target + gfx::Transform()); // draw transform ASSERT_TRUE(tiling->TileAt(0, 0)); ASSERT_TRUE(tiling->TileAt(0, 1)); @@ -1928,14 +1964,18 @@ TEST(UpdateTilePrioritiesTest, BasicMotion) { viewport_in_layer_space, last_layer_contents_scale, last_frame_time_in_seconds, - Occlusion()); + NULL, // occlusion tracker + NULL, // render target + gfx::Transform()); // draw transform // current frame tiling->UpdateTilePriorities(ACTIVE_TREE, viewport_in_layer_space, current_layer_contents_scale, current_frame_time_in_seconds, - Occlusion()); + NULL, // occlusion tracker + NULL, // render target + gfx::Transform()); // draw transform ASSERT_TRUE(tiling->TileAt(0, 0)); ASSERT_TRUE(tiling->TileAt(0, 1)); @@ -2006,14 +2046,18 @@ TEST(UpdateTilePrioritiesTest, RotationMotion) { viewport_in_layer_space, last_layer_contents_scale, last_frame_time_in_seconds, - Occlusion()); + NULL, // occlusion tracker + NULL, // render target + gfx::Transform()); // draw transform // current frame tiling->UpdateTilePriorities(ACTIVE_TREE, viewport_in_layer_space, current_layer_contents_scale, current_frame_time_in_seconds, - Occlusion()); + NULL, // occlusion tracker + NULL, // render target + gfx::Transform()); // draw transform ASSERT_TRUE(tiling->TileAt(0, 0)); ASSERT_TRUE(tiling->TileAt(0, 1)); @@ -2042,8 +2086,13 @@ TEST(PictureLayerTilingTest, ResetClearsPriorities) { tiling = TestablePictureLayerTiling::Create(1.0f, // contents_scale gfx::Size(100, 100), &client); - tiling->UpdateTilePriorities( - ACTIVE_TREE, gfx::Rect(0, 0, 100, 100), 1.0f, 1.0f, Occlusion()); + tiling->UpdateTilePriorities(ACTIVE_TREE, + gfx::Rect(0, 0, 100, 100), + 1.0f, + 1.0f, + NULL, // occlusion tracker + NULL, // render target + gfx::Transform()); // draw transform std::vector<scoped_refptr<Tile> > tiles = tiling->AllRefTilesForTesting(); ASSERT_GT(tiles.size(), 0u); @@ -2083,8 +2132,13 @@ TEST(PictureLayerTilingTest, RecycledTilesCleared) { gfx::Size(10000, 10000), &active_client); // Create all tiles on this tiling. - active_tiling->UpdateTilePriorities( - ACTIVE_TREE, gfx::Rect(0, 0, 100, 100), 1.0f, 1.0f, Occlusion()); + active_tiling->UpdateTilePriorities(ACTIVE_TREE, + gfx::Rect(0, 0, 100, 100), + 1.0f, + 1.0f, + NULL, // occlusion tracker + NULL, // render target + gfx::Transform()); // draw transform FakePictureLayerTilingClient recycle_client; recycle_client.SetTileSize(gfx::Size(100, 100)); @@ -2098,8 +2152,13 @@ TEST(PictureLayerTilingTest, RecycledTilesCleared) { &recycle_client); // Create all tiles on the second tiling. All tiles should be shared. - recycle_tiling->UpdateTilePriorities( - PENDING_TREE, gfx::Rect(0, 0, 100, 100), 1.0f, 1.0f, Occlusion()); + recycle_tiling->UpdateTilePriorities(PENDING_TREE, + gfx::Rect(0, 0, 100, 100), + 1.0f, + 1.0f, + NULL, // occlusion tracker + NULL, // render target + gfx::Transform()); // draw transform // Set the second tiling as recycled. active_client.set_twin_tiling(NULL); @@ -2112,15 +2171,25 @@ TEST(PictureLayerTilingTest, RecycledTilesCleared) { EXPECT_EQ(active_tiling->TileAt(0, 0), recycle_tiling->TileAt(0, 0)); // Move the viewport far away from the (0, 0) tile. - active_tiling->UpdateTilePriorities( - ACTIVE_TREE, gfx::Rect(9000, 9000, 100, 100), 1.0f, 2.0, Occlusion()); + active_tiling->UpdateTilePriorities(ACTIVE_TREE, + gfx::Rect(9000, 9000, 100, 100), + 1.0f, + 2.0, + NULL, // occlusion tracker + NULL, // render target + gfx::Transform()); // draw transform // Ensure the tile was deleted on both tilings. EXPECT_FALSE(active_tiling->TileAt(0, 0)); EXPECT_FALSE(recycle_tiling->TileAt(0, 0)); // Move the viewport back to (0, 0) tile. - active_tiling->UpdateTilePriorities( - ACTIVE_TREE, gfx::Rect(0, 0, 100, 100), 1.0f, 3.0, Occlusion()); + active_tiling->UpdateTilePriorities(ACTIVE_TREE, + gfx::Rect(0, 0, 100, 100), + 1.0f, + 3.0, + NULL, // occlusion tracker + NULL, // render target + gfx::Transform()); // draw transform // Ensure that we now have a tile here, but the recycle tiling does not. EXPECT_TRUE(active_tiling->TileAt(0, 0)); @@ -2137,8 +2206,13 @@ TEST(PictureLayerTilingTest, RecycledTilesClearedOnReset) { gfx::Size(100, 100), &active_client); // Create all tiles on this tiling. - active_tiling->UpdateTilePriorities( - ACTIVE_TREE, gfx::Rect(0, 0, 100, 100), 1.0f, 1.0f, Occlusion()); + active_tiling->UpdateTilePriorities(ACTIVE_TREE, + gfx::Rect(0, 0, 100, 100), + 1.0f, + 1.0f, + NULL, // occlusion tracker + NULL, // render target + gfx::Transform()); // draw transform FakePictureLayerTilingClient recycle_client; recycle_client.SetTileSize(gfx::Size(100, 100)); @@ -2152,8 +2226,13 @@ TEST(PictureLayerTilingTest, RecycledTilesClearedOnReset) { &recycle_client); // Create all tiles on the recycle tiling. All tiles should be shared. - recycle_tiling->UpdateTilePriorities( - PENDING_TREE, gfx::Rect(0, 0, 100, 100), 1.0f, 1.0f, Occlusion()); + recycle_tiling->UpdateTilePriorities(PENDING_TREE, + gfx::Rect(0, 0, 100, 100), + 1.0f, + 1.0f, + NULL, // occlusion tracker + NULL, // render target + gfx::Transform()); // draw transform // Set the second tiling as recycled. active_client.set_twin_tiling(NULL); diff --git a/cc/resources/tile_manager_perftest.cc b/cc/resources/tile_manager_perftest.cc index 65ec4d8..3aa04a2 100644 --- a/cc/resources/tile_manager_perftest.cc +++ b/cc/resources/tile_manager_perftest.cc @@ -187,7 +187,7 @@ class TileManagerPerfTest : public testing::Test { std::vector<LayerImpl*> layers = CreateLayers(layer_count, 10); for (unsigned i = 0; i < layers.size(); ++i) - layers[i]->UpdateTiles(Occlusion()); + layers[i]->UpdateTiles(NULL); timer_.Reset(); do { @@ -214,7 +214,7 @@ class TileManagerPerfTest : public testing::Test { std::vector<LayerImpl*> layers = CreateLayers(layer_count, 100); for (unsigned i = 0; i < layers.size(); ++i) - layers[i]->UpdateTiles(Occlusion()); + layers[i]->UpdateTiles(NULL); int priority_count = 0; timer_.Reset(); @@ -251,7 +251,7 @@ class TileManagerPerfTest : public testing::Test { for (unsigned i = 0; i < layers.size(); ++i) { FakePictureLayerImpl* layer = static_cast<FakePictureLayerImpl*>(layers[i]); - layer->UpdateTiles(Occlusion()); + layer->UpdateTiles(NULL); for (size_t j = 0; j < layer->GetTilings()->num_tilings(); ++j) { tile_manager()->InitializeTilesWithResourcesForTesting( layer->GetTilings()->tiling_at(j)->AllTilesForTesting()); @@ -286,7 +286,7 @@ class TileManagerPerfTest : public testing::Test { for (unsigned i = 0; i < layers.size(); ++i) { FakePictureLayerImpl* layer = static_cast<FakePictureLayerImpl*>(layers[i]); - layer->UpdateTiles(Occlusion()); + layer->UpdateTiles(NULL); for (size_t j = 0; j < layer->GetTilings()->num_tilings(); ++j) { tile_manager()->InitializeTilesWithResourcesForTesting( layer->GetTilings()->tiling_at(j)->AllTilesForTesting()); @@ -396,7 +396,7 @@ class TileManagerPerfTest : public testing::Test { BeginFrameArgs args = CreateBeginFrameArgsForTesting(); host_impl_.UpdateCurrentBeginFrameArgs(args); for (unsigned i = 0; i < layers.size(); ++i) - layers[i]->UpdateTiles(Occlusion()); + layers[i]->UpdateTiles(NULL); GlobalStateThatImpactsTilePriority global_state(GlobalStateForTest()); tile_manager()->ManageTiles(global_state); diff --git a/cc/resources/tile_manager_unittest.cc b/cc/resources/tile_manager_unittest.cc index fdba050..f229fcd 100644 --- a/cc/resources/tile_manager_unittest.cc +++ b/cc/resources/tile_manager_unittest.cc @@ -646,13 +646,37 @@ TEST_F(TileManagerTilePriorityQueueTest, RasterTilePriorityQueue) { // Renew all of the tile priorities. gfx::Rect viewport(50, 50, 100, 100); pending_layer_->HighResTiling()->UpdateTilePriorities( - PENDING_TREE, viewport, 1.0f, 1.0, Occlusion()); + PENDING_TREE, + viewport, + 1.0f, + 1.0, + NULL, + pending_layer_->render_target(), + pending_layer_->draw_transform()); pending_layer_->LowResTiling()->UpdateTilePriorities( - PENDING_TREE, viewport, 1.0f, 1.0, Occlusion()); + PENDING_TREE, + viewport, + 1.0f, + 1.0, + NULL, + pending_layer_->render_target(), + pending_layer_->draw_transform()); active_layer_->HighResTiling()->UpdateTilePriorities( - ACTIVE_TREE, viewport, 1.0f, 1.0, Occlusion()); + ACTIVE_TREE, + viewport, + 1.0f, + 1.0, + NULL, + active_layer_->render_target(), + active_layer_->draw_transform()); active_layer_->LowResTiling()->UpdateTilePriorities( - ACTIVE_TREE, viewport, 1.0f, 1.0, Occlusion()); + ACTIVE_TREE, + viewport, + 1.0f, + 1.0, + NULL, + active_layer_->render_target(), + active_layer_->draw_transform()); // Populate all tiles directly from the tilings. all_tiles.clear(); @@ -821,13 +845,37 @@ TEST_F(TileManagerTilePriorityQueueTest, EvictionTilePriorityQueue) { // Renew all of the tile priorities. gfx::Rect viewport(50, 50, 100, 100); pending_layer_->HighResTiling()->UpdateTilePriorities( - PENDING_TREE, viewport, 1.0f, 1.0, Occlusion()); + PENDING_TREE, + viewport, + 1.0f, + 1.0, + NULL, + pending_layer_->render_target(), + pending_layer_->draw_transform()); pending_layer_->LowResTiling()->UpdateTilePriorities( - PENDING_TREE, viewport, 1.0f, 1.0, Occlusion()); + PENDING_TREE, + viewport, + 1.0f, + 1.0, + NULL, + pending_layer_->render_target(), + pending_layer_->draw_transform()); active_layer_->HighResTiling()->UpdateTilePriorities( - ACTIVE_TREE, viewport, 1.0f, 1.0, Occlusion()); + ACTIVE_TREE, + viewport, + 1.0f, + 1.0, + NULL, + active_layer_->render_target(), + active_layer_->draw_transform()); active_layer_->LowResTiling()->UpdateTilePriorities( - ACTIVE_TREE, viewport, 1.0f, 1.0, Occlusion()); + ACTIVE_TREE, + viewport, + 1.0f, + 1.0, + NULL, + active_layer_->render_target(), + active_layer_->draw_transform()); // Populate all tiles directly from the tilings. all_tiles.clear(); @@ -972,13 +1020,37 @@ TEST_F(TileManagerTilePriorityQueueTest, // Renew all of the tile priorities. gfx::Rect viewport(layer_bounds); pending_layer_->HighResTiling()->UpdateTilePriorities( - PENDING_TREE, viewport, 1.0f, 1.0, Occlusion()); + PENDING_TREE, + viewport, + 1.0f, + 1.0, + NULL, + pending_layer_->render_target(), + pending_layer_->draw_transform()); pending_layer_->LowResTiling()->UpdateTilePriorities( - PENDING_TREE, viewport, 1.0f, 1.0, Occlusion()); + PENDING_TREE, + viewport, + 1.0f, + 1.0, + NULL, + pending_layer_->render_target(), + pending_layer_->draw_transform()); pending_child_layer->HighResTiling()->UpdateTilePriorities( - PENDING_TREE, viewport, 1.0f, 1.0, Occlusion()); + PENDING_TREE, + viewport, + 1.0f, + 1.0, + NULL, + pending_child_layer->render_target(), + pending_child_layer->draw_transform()); pending_child_layer->LowResTiling()->UpdateTilePriorities( - PENDING_TREE, viewport, 1.0f, 1.0, Occlusion()); + PENDING_TREE, + viewport, + 1.0f, + 1.0, + NULL, + pending_child_layer->render_target(), + pending_child_layer->draw_transform()); // Populate all tiles directly from the tilings. all_tiles.clear(); diff --git a/cc/trees/layer_tree_impl.cc b/cc/trees/layer_tree_impl.cc index e368bb8..328234f 100644 --- a/cc/trees/layer_tree_impl.cc +++ b/cc/trees/layer_tree_impl.cc @@ -520,13 +520,8 @@ bool LayerTreeImpl::UpdateDrawProperties() { occlusion_tracker->EnterLayer(it); LayerImpl* layer = *it; - const Occlusion& occlusion_in_content_space = - occlusion_tracker ? occlusion_tracker->GetCurrentOcclusionForLayer( - layer->draw_transform()) - : Occlusion(); - if (it.represents_itself()) - layer->UpdateTiles(occlusion_in_content_space); + layer->UpdateTiles(occlusion_tracker.get()); if (!it.represents_contributing_render_surface()) { if (occlusion_tracker) @@ -535,10 +530,10 @@ bool LayerTreeImpl::UpdateDrawProperties() { } if (layer->mask_layer()) - layer->mask_layer()->UpdateTiles(occlusion_in_content_space); + layer->mask_layer()->UpdateTiles(occlusion_tracker.get()); if (layer->replica_layer() && layer->replica_layer()->mask_layer()) layer->replica_layer()->mask_layer()->UpdateTiles( - occlusion_in_content_space); + occlusion_tracker.get()); if (occlusion_tracker) occlusion_tracker->LeaveLayer(it); diff --git a/cc/trees/occlusion.cc b/cc/trees/occlusion.cc deleted file mode 100644 index c91c0ca..0000000 --- a/cc/trees/occlusion.cc +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright 2014 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "cc/trees/occlusion.h" - -#include "cc/base/math_util.h" -#include "ui/gfx/rect.h" - -namespace cc { - -Occlusion::Occlusion() { -} - -Occlusion::Occlusion(const gfx::Transform& draw_transform, - const SimpleEnclosedRegion& occlusion_from_outside_target, - const SimpleEnclosedRegion& occlusion_from_inside_target) - : draw_transform_(draw_transform), - occlusion_from_outside_target_(occlusion_from_outside_target), - occlusion_from_inside_target_(occlusion_from_inside_target) { -} - -bool Occlusion::IsOccluded(const gfx::Rect& content_rect) const { - if (content_rect.IsEmpty()) - return true; - - if (occlusion_from_inside_target_.IsEmpty() && - occlusion_from_outside_target_.IsEmpty()) { - return false; - } - - // Take the ToEnclosingRect at each step, as we want to contain any unoccluded - // partial pixels in the resulting Rect. - gfx::Rect unoccluded_rect_in_target_surface = - MathUtil::MapEnclosingClippedRect(draw_transform_, content_rect); - DCHECK_LE(occlusion_from_inside_target_.GetRegionComplexity(), 1u); - DCHECK_LE(occlusion_from_outside_target_.GetRegionComplexity(), 1u); - // These subtract operations are more lossy than if we did both operations at - // once. - unoccluded_rect_in_target_surface.Subtract( - occlusion_from_inside_target_.bounds()); - unoccluded_rect_in_target_surface.Subtract( - occlusion_from_outside_target_.bounds()); - - return unoccluded_rect_in_target_surface.IsEmpty(); -} - -} // namespace cc diff --git a/cc/trees/occlusion.h b/cc/trees/occlusion.h deleted file mode 100644 index 982d7e8..0000000 --- a/cc/trees/occlusion.h +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright 2014 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef CC_TREES_OCCLUSION_H_ -#define CC_TREES_OCCLUSION_H_ - -#include "base/basictypes.h" -#include "cc/base/cc_export.h" -#include "cc/base/simple_enclosed_region.h" -#include "ui/gfx/transform.h" - -namespace gfx { -class Rect; -} // namespace gfx - -namespace cc { - -class CC_EXPORT Occlusion { - public: - Occlusion(); - Occlusion(const gfx::Transform& draw_transform, - const SimpleEnclosedRegion& occlusion_from_outside_target, - const SimpleEnclosedRegion& occlusion_from_inside_target); - - bool IsOccluded(const gfx::Rect& content_rect) const; - - private: - gfx::Transform draw_transform_; - SimpleEnclosedRegion occlusion_from_outside_target_; - SimpleEnclosedRegion occlusion_from_inside_target_; -}; - -} // namespace cc - -#endif // CC_TREES_OCCLUSION_H_ diff --git a/cc/trees/occlusion_tracker.cc b/cc/trees/occlusion_tracker.cc index 8fdd6e2..f233e07 100644 --- a/cc/trees/occlusion_tracker.cc +++ b/cc/trees/occlusion_tracker.cc @@ -28,16 +28,6 @@ template <typename LayerType> OcclusionTracker<LayerType>::~OcclusionTracker() {} template <typename LayerType> -Occlusion OcclusionTracker<LayerType>::GetCurrentOcclusionForLayer( - const gfx::Transform& draw_transform) const { - DCHECK(!stack_.empty()); - const StackObject& back = stack_.back(); - return Occlusion(draw_transform, - back.occlusion_from_outside_target, - back.occlusion_from_inside_target); -} - -template <typename LayerType> void OcclusionTracker<LayerType>::EnterLayer( const LayerIteratorPosition<LayerType>& layer_iterator) { LayerType* render_target = layer_iterator.target_render_surface_layer; diff --git a/cc/trees/occlusion_tracker.h b/cc/trees/occlusion_tracker.h index 9b4b74e..8d07f43 100644 --- a/cc/trees/occlusion_tracker.h +++ b/cc/trees/occlusion_tracker.h @@ -11,7 +11,6 @@ #include "cc/base/cc_export.h" #include "cc/base/simple_enclosed_region.h" #include "cc/layers/layer_iterator.h" -#include "cc/trees/occlusion.h" #include "ui/gfx/rect.h" namespace cc { @@ -36,11 +35,6 @@ class CC_EXPORT OcclusionTracker { explicit OcclusionTracker(const gfx::Rect& screen_space_clip_rect); ~OcclusionTracker(); - // Return an occlusion that retains the current state of the tracker - // and can be used outside of a layer walk to check occlusion. - Occlusion GetCurrentOcclusionForLayer( - const gfx::Transform& draw_transform) const; - // Called at the beginning of each step in the LayerIterator's front-to-back // traversal. void EnterLayer(const LayerIteratorPosition<LayerType>& layer_iterator); diff --git a/cc/trees/occlusion_tracker_unittest.cc b/cc/trees/occlusion_tracker_unittest.cc index 56059cb..aaf655f2 100644 --- a/cc/trees/occlusion_tracker_unittest.cc +++ b/cc/trees/occlusion_tracker_unittest.cc @@ -85,11 +85,6 @@ class TestOcclusionTrackerWithClip : public TestOcclusionTracker<LayerType> { bool OccludedLayer(const LayerType* layer, const gfx::Rect& content_rect) const { DCHECK(layer->visible_content_rect().Contains(content_rect)); - EXPECT_EQ( - this->Occluded( - layer->render_target(), content_rect, layer->draw_transform()), - this->GetCurrentOcclusionForLayer(layer->draw_transform()) - .IsOccluded(content_rect)); return this->Occluded( layer->render_target(), content_rect, layer->draw_transform()); } |