Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(233)

Side by Side Diff: cc/trees/layer_tree_host_unittest.cc

Issue 16833003: cc: Emulate BeginFrame in OutputSurfaces that don't support it natively (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2011 The Chromium Authors. All rights reserved. 1 // Copyright 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/trees/layer_tree_host.h" 5 #include "cc/trees/layer_tree_host.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/synchronization/lock.h" 9 #include "base/synchronization/lock.h"
10 #include "cc/animation/timing_function.h" 10 #include "cc/animation/timing_function.h"
(...skipping 2031 matching lines...) Expand 10 before | Expand all | Expand 10 after
2042 2042
2043 private: 2043 private:
2044 gfx::Size bounds_; 2044 gfx::Size bounds_;
2045 FillRectContentLayerClient content_client_; 2045 FillRectContentLayerClient content_client_;
2046 scoped_refptr<PictureLayer> layer_; 2046 scoped_refptr<PictureLayer> layer_;
2047 skia::RefPtr<SkPicture> picture_; 2047 skia::RefPtr<SkPicture> picture_;
2048 }; 2048 };
2049 2049
2050 MULTI_THREAD_TEST_F(LayerTreeHostTestCapturePicture); 2050 MULTI_THREAD_TEST_F(LayerTreeHostTestCapturePicture);
2051 2051
2052 class LayerTreeHostTestMaxPendingFrames : public LayerTreeHostTest {
2053 public:
2054 LayerTreeHostTestMaxPendingFrames() : LayerTreeHostTest() {}
2055
2056 virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); }
2057
2058 virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
2059 DCHECK(host_impl->proxy()->HasImplThread());
2060
2061 const ThreadProxy* proxy = static_cast<ThreadProxy*>(host_impl->proxy());
2062 if (delegating_renderer()) {
2063 EXPECT_EQ(1, proxy->MaxFramesPendingForTesting());
2064 } else {
2065 EXPECT_EQ(FrameRateController::DEFAULT_MAX_FRAMES_PENDING,
2066 proxy->MaxFramesPendingForTesting());
2067 }
2068 EndTest();
2069 }
2070
2071 virtual void AfterTest() OVERRIDE {}
2072 };
2073
2074 TEST_F(LayerTreeHostTestMaxPendingFrames, DelegatingRenderer) {
2075 RunTest(true, true, true);
2076 }
2077
2078 TEST_F(LayerTreeHostTestMaxPendingFrames, GLRenderer) {
2079 RunTest(true, false, true);
2080 }
2081
2082 class LayerTreeHostTestShutdownWithOnlySomeResourcesEvicted 2052 class LayerTreeHostTestShutdownWithOnlySomeResourcesEvicted
2083 : public LayerTreeHostTest { 2053 : public LayerTreeHostTest {
2084 public: 2054 public:
2085 LayerTreeHostTestShutdownWithOnlySomeResourcesEvicted() 2055 LayerTreeHostTestShutdownWithOnlySomeResourcesEvicted()
2086 : root_layer_(FakeContentLayer::Create(&client_)), 2056 : root_layer_(FakeContentLayer::Create(&client_)),
2087 child_layer1_(FakeContentLayer::Create(&client_)), 2057 child_layer1_(FakeContentLayer::Create(&client_)),
2088 child_layer2_(FakeContentLayer::Create(&client_)), 2058 child_layer2_(FakeContentLayer::Create(&client_)),
2089 num_commits_(0) {} 2059 num_commits_(0) {}
2090 2060
2091 virtual void BeginTest() OVERRIDE { 2061 virtual void BeginTest() OVERRIDE {
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
2246 SINGLE_THREAD_TEST_F(LayerTreeHostTestLCDNotification); 2216 SINGLE_THREAD_TEST_F(LayerTreeHostTestLCDNotification);
2247 2217
2248 // Verify that the BeginFrame notification is used to initiate rendering. 2218 // Verify that the BeginFrame notification is used to initiate rendering.
2249 class LayerTreeHostTestBeginFrameNotification : public LayerTreeHostTest { 2219 class LayerTreeHostTestBeginFrameNotification : public LayerTreeHostTest {
2250 public: 2220 public:
2251 virtual void InitializeSettings(LayerTreeSettings* settings) OVERRIDE { 2221 virtual void InitializeSettings(LayerTreeSettings* settings) OVERRIDE {
2252 settings->begin_frame_scheduling_enabled = true; 2222 settings->begin_frame_scheduling_enabled = true;
2253 } 2223 }
2254 2224
2255 virtual void BeginTest() OVERRIDE { 2225 virtual void BeginTest() OVERRIDE {
2226 // This will trigger a SetNeedsBeginFrame which will trigger a BeginFrame.
2256 PostSetNeedsCommitToMainThread(); 2227 PostSetNeedsCommitToMainThread();
2257 } 2228 }
2258 2229
2259 virtual void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
2260 FakeOutputSurface* fake_output_surface =
2261 reinterpret_cast<FakeOutputSurface*>(host_impl->output_surface());
2262
2263 // The BeginFrame notification is turned off now but will get
2264 // enabled once we return, so post a task to trigger it.
2265 ASSERT_FALSE(fake_output_surface->needs_begin_frame());
2266 PostBeginFrameOnImplThread(fake_output_surface);
2267 }
2268
2269 void PostBeginFrameOnImplThread(FakeOutputSurface* fake_output_surface) {
2270 DCHECK(ImplThread());
2271 ImplThread()->PostTask(
2272 base::Bind(&LayerTreeHostTestBeginFrameNotification::BeginFrame,
2273 base::Unretained(this),
2274 base::Unretained(fake_output_surface)));
2275 }
2276
2277 void BeginFrame(FakeOutputSurface* fake_output_surface) {
2278 ASSERT_TRUE(fake_output_surface->needs_begin_frame());
2279 fake_output_surface->BeginFrame(frame_time_);
2280 }
2281
2282 virtual bool PrepareToDrawOnThread( 2230 virtual bool PrepareToDrawOnThread(
2283 LayerTreeHostImpl* host_impl, 2231 LayerTreeHostImpl* host_impl,
2284 LayerTreeHostImpl::FrameData* frame, 2232 LayerTreeHostImpl::FrameData* frame,
2285 bool result) OVERRIDE { 2233 bool result) OVERRIDE {
2286 EndTest(); 2234 EndTest();
2287 return true; 2235 return true;
2288 } 2236 }
2289 2237
2290 virtual void AfterTest() OVERRIDE {} 2238 virtual void AfterTest() OVERRIDE {}
2291 2239
(...skipping 525 matching lines...) Expand 10 before | Expand all | Expand 10 after
2817 layer_tree_host()->CompositeAndReadback(pixels, gfx::Rect(0, 0, 1, 1)); 2765 layer_tree_host()->CompositeAndReadback(pixels, gfx::Rect(0, 0, 1, 1));
2818 break; 2766 break;
2819 case 3: 2767 case 3:
2820 // Round 5 done. 2768 // Round 5 done.
2821 EXPECT_EQ(5, commit); 2769 EXPECT_EQ(5, commit);
2822 EndTest(); 2770 EndTest();
2823 break; 2771 break;
2824 } 2772 }
2825 } 2773 }
2826 2774
2827 virtual void SwapBuffersCompleteOnThread(LayerTreeHostImpl* impl) OVERRIDE {
2828 const ThreadProxy* proxy = static_cast<ThreadProxy*>(impl->proxy());
2829 EXPECT_EQ(0, proxy->NumFramesPendingForTesting());
2830 }
2831
2832 virtual void AfterTest() OVERRIDE {} 2775 virtual void AfterTest() OVERRIDE {}
2833 2776
2834 protected: 2777 protected:
2835 int frame_; 2778 int frame_;
2836 }; 2779 };
2837 2780
2838 TEST_F(LayerTreeHostTestNumFramesPending, DelegatingRenderer) { 2781 TEST_F(LayerTreeHostTestNumFramesPending, DelegatingRenderer) {
2839 RunTest(true, true, true); 2782 RunTest(true, true, true);
2840 } 2783 }
2841 2784
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
2888 } 2831 }
2889 } 2832 }
2890 2833
2891 void DeferredInitializeAndRedraw(LayerTreeHostImpl* host_impl) { 2834 void DeferredInitializeAndRedraw(LayerTreeHostImpl* host_impl) {
2892 EXPECT_TRUE( 2835 EXPECT_TRUE(
2893 host_impl->DeferredInitialize(scoped_refptr<ContextProvider>())); 2836 host_impl->DeferredInitialize(scoped_refptr<ContextProvider>()));
2894 initialized_gl_ = true; 2837 initialized_gl_ = true;
2895 2838
2896 // Force redraw again. 2839 // Force redraw again.
2897 host_impl->SetNeedsRedrawRect(gfx::Rect(1, 1)); 2840 host_impl->SetNeedsRedrawRect(gfx::Rect(1, 1));
2841
2842 // If we didn't swap this begin frame, we need to request another one.
2843 host_impl->SetNeedsBeginFrame(true);
2898 } 2844 }
2899 2845
2900 virtual void AfterTest() OVERRIDE { 2846 virtual void AfterTest() OVERRIDE {
2901 EXPECT_TRUE(initialized_gl_); 2847 EXPECT_TRUE(initialized_gl_);
2902 } 2848 }
2903 2849
2904 private: 2850 private:
2905 FakeContentLayerClient client_; 2851 FakeContentLayerClient client_;
2906 scoped_refptr<FakePictureLayer> layer_; 2852 scoped_refptr<FakePictureLayer> layer_;
2907 bool initialized_gl_; 2853 bool initialized_gl_;
2908 }; 2854 };
2909 2855
2910 MULTI_THREAD_TEST_F(LayerTreeHostTestDeferredInitialize); 2856 MULTI_THREAD_TEST_F(LayerTreeHostTestDeferredInitialize);
2911 2857
2912 } // namespace 2858 } // namespace
2913 } // namespace cc 2859 } // namespace cc
OLDNEW
« no previous file with comments | « cc/trees/layer_tree_host_impl_unittest.cc ('k') | cc/trees/layer_tree_host_unittest_animation.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698