| OLD | NEW | 
|    1 // Copyright 2014 The Chromium Authors. All rights reserved. |    1 // Copyright 2014 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/surfaces/surface.h" |    5 #include "cc/surfaces/surface.h" | 
|    6 #include "base/memory/ptr_util.h" |    6 #include "base/memory/ptr_util.h" | 
|    7 #include "cc/output/copy_output_result.h" |    7 #include "cc/output/copy_output_result.h" | 
|    8 #include "cc/surfaces/compositor_frame_sink_support.h" |    8 #include "cc/surfaces/compositor_frame_sink_support.h" | 
|    9 #include "cc/surfaces/local_surface_id_allocator.h" |    9 #include "cc/surfaces/local_surface_id_allocator.h" | 
|   10 #include "cc/surfaces/surface_dependency_tracker.h" |   10 #include "cc/surfaces/surface_dependency_tracker.h" | 
|   11 #include "cc/surfaces/surface_manager.h" |   11 #include "cc/surfaces/surface_manager.h" | 
|   12 #include "cc/test/begin_frame_args_test.h" |   12 #include "cc/test/begin_frame_args_test.h" | 
 |   13 #include "cc/test/compositor_frame_helpers.h" | 
|   13 #include "cc/test/fake_external_begin_frame_source.h" |   14 #include "cc/test/fake_external_begin_frame_source.h" | 
|   14 #include "cc/test/scheduler_test_common.h" |   15 #include "cc/test/scheduler_test_common.h" | 
|   15 #include "testing/gtest/include/gtest/gtest.h" |   16 #include "testing/gtest/include/gtest/gtest.h" | 
|   16 #include "ui/gfx/geometry/size.h" |   17 #include "ui/gfx/geometry/size.h" | 
|   17  |   18  | 
|   18 namespace cc { |   19 namespace cc { | 
|   19 namespace { |   20 namespace { | 
|   20  |   21  | 
|   21 constexpr FrameSinkId kArbitraryFrameSinkId(1, 1); |   22 constexpr FrameSinkId kArbitraryFrameSinkId(1, 1); | 
|   22 constexpr bool kIsRoot = true; |   23 constexpr bool kIsRoot = true; | 
|   23 constexpr bool kHandlesFrameSinkIdInvalidation = true; |   24 constexpr bool kHandlesFrameSinkIdInvalidation = true; | 
|   24 constexpr bool kNeedsSyncPoints = true; |   25 constexpr bool kNeedsSyncPoints = true; | 
|   25  |   26  | 
|   26 TEST(SurfaceTest, SurfaceLifetime) { |   27 TEST(SurfaceTest, SurfaceLifetime) { | 
|   27   SurfaceManager manager; |   28   SurfaceManager manager; | 
|   28   std::unique_ptr<CompositorFrameSinkSupport> support = |   29   std::unique_ptr<CompositorFrameSinkSupport> support = | 
|   29       CompositorFrameSinkSupport::Create( |   30       CompositorFrameSinkSupport::Create( | 
|   30           nullptr, &manager, kArbitraryFrameSinkId, kIsRoot, |   31           nullptr, &manager, kArbitraryFrameSinkId, kIsRoot, | 
|   31           kHandlesFrameSinkIdInvalidation, kNeedsSyncPoints); |   32           kHandlesFrameSinkIdInvalidation, kNeedsSyncPoints); | 
|   32  |   33  | 
|   33   LocalSurfaceId local_surface_id(6, base::UnguessableToken::Create()); |   34   LocalSurfaceId local_surface_id(6, base::UnguessableToken::Create()); | 
|   34   SurfaceId surface_id(kArbitraryFrameSinkId, local_surface_id); |   35   SurfaceId surface_id(kArbitraryFrameSinkId, local_surface_id); | 
|   35   support->SubmitCompositorFrame(local_surface_id, CompositorFrame()); |   36   support->SubmitCompositorFrame(local_surface_id, test::MakeCompositorFrame()); | 
|   36   EXPECT_TRUE(manager.GetSurfaceForId(surface_id)); |   37   EXPECT_TRUE(manager.GetSurfaceForId(surface_id)); | 
|   37   support->EvictFrame(); |   38   support->EvictFrame(); | 
|   38  |   39  | 
|   39   EXPECT_EQ(NULL, manager.GetSurfaceForId(surface_id)); |   40   EXPECT_EQ(NULL, manager.GetSurfaceForId(surface_id)); | 
|   40 } |   41 } | 
|   41  |   42  | 
|   42 TEST(SurfaceTest, SurfaceIds) { |   43 TEST(SurfaceTest, SurfaceIds) { | 
|   43   for (size_t i = 0; i < 3; ++i) { |   44   for (size_t i = 0; i < 3; ++i) { | 
|   44     LocalSurfaceIdAllocator allocator; |   45     LocalSurfaceIdAllocator allocator; | 
|   45     LocalSurfaceId id1 = allocator.GenerateId(); |   46     LocalSurfaceId id1 = allocator.GenerateId(); | 
| (...skipping 11 matching lines...) Expand all  Loading... | 
|   57 // aggregated on the next frame. |   58 // aggregated on the next frame. | 
|   58 TEST(SurfaceTest, CopyRequestLifetime) { |   59 TEST(SurfaceTest, CopyRequestLifetime) { | 
|   59   SurfaceManager manager; |   60   SurfaceManager manager; | 
|   60   std::unique_ptr<CompositorFrameSinkSupport> support = |   61   std::unique_ptr<CompositorFrameSinkSupport> support = | 
|   61       CompositorFrameSinkSupport::Create( |   62       CompositorFrameSinkSupport::Create( | 
|   62           nullptr, &manager, kArbitraryFrameSinkId, kIsRoot, |   63           nullptr, &manager, kArbitraryFrameSinkId, kIsRoot, | 
|   63           kHandlesFrameSinkIdInvalidation, kNeedsSyncPoints); |   64           kHandlesFrameSinkIdInvalidation, kNeedsSyncPoints); | 
|   64  |   65  | 
|   65   LocalSurfaceId local_surface_id(6, base::UnguessableToken::Create()); |   66   LocalSurfaceId local_surface_id(6, base::UnguessableToken::Create()); | 
|   66   SurfaceId surface_id(kArbitraryFrameSinkId, local_surface_id); |   67   SurfaceId surface_id(kArbitraryFrameSinkId, local_surface_id); | 
|   67   CompositorFrame frame; |   68   CompositorFrame frame = test::MakeCompositorFrame(); | 
|   68   frame.render_pass_list.push_back(RenderPass::Create()); |   69   frame.render_pass_list.push_back(RenderPass::Create()); | 
|   69   support->SubmitCompositorFrame(local_surface_id, std::move(frame)); |   70   support->SubmitCompositorFrame(local_surface_id, std::move(frame)); | 
|   70   Surface* surface = manager.GetSurfaceForId(surface_id); |   71   Surface* surface = manager.GetSurfaceForId(surface_id); | 
|   71   ASSERT_TRUE(!!surface); |   72   ASSERT_TRUE(!!surface); | 
|   72  |   73  | 
|   73   bool copy_called = false; |   74   bool copy_called = false; | 
|   74   support->RequestCopyOfSurface(CopyOutputRequest::CreateRequest( |   75   support->RequestCopyOfSurface(CopyOutputRequest::CreateRequest( | 
|   75       base::Bind(&TestCopyResultCallback, ©_called))); |   76       base::Bind(&TestCopyResultCallback, ©_called))); | 
|   76   EXPECT_TRUE(manager.GetSurfaceForId(surface_id)); |   77   EXPECT_TRUE(manager.GetSurfaceForId(surface_id)); | 
|   77   EXPECT_FALSE(copy_called); |   78   EXPECT_FALSE(copy_called); | 
|   78  |   79  | 
|   79   int max_frame = 3, start_id = 200; |   80   int max_frame = 3, start_id = 200; | 
|   80   for (int i = 0; i < max_frame; ++i) { |   81   for (int i = 0; i < max_frame; ++i) { | 
|   81     CompositorFrame frame; |   82     CompositorFrame frame = test::MakeCompositorFrame(); | 
|   82     frame.render_pass_list.push_back(RenderPass::Create()); |   83     frame.render_pass_list.push_back(RenderPass::Create()); | 
|   83     frame.render_pass_list.back()->id = i * 3 + start_id; |   84     frame.render_pass_list.back()->id = i * 3 + start_id; | 
|   84     frame.render_pass_list.push_back(RenderPass::Create()); |   85     frame.render_pass_list.push_back(RenderPass::Create()); | 
|   85     frame.render_pass_list.back()->id = i * 3 + start_id + 1; |   86     frame.render_pass_list.back()->id = i * 3 + start_id + 1; | 
|   86     frame.render_pass_list.push_back(RenderPass::Create()); |   87     frame.render_pass_list.push_back(RenderPass::Create()); | 
|   87     frame.render_pass_list.back()->id = i * 3 + start_id + 2; |   88     frame.render_pass_list.back()->id = i * 3 + start_id + 2; | 
|   88     support->SubmitCompositorFrame(local_surface_id, std::move(frame)); |   89     support->SubmitCompositorFrame(local_surface_id, std::move(frame)); | 
|   89   } |   90   } | 
|   90  |   91  | 
|   91   int last_pass_id = (max_frame - 1) * 3 + start_id + 2; |   92   int last_pass_id = (max_frame - 1) * 3 + start_id + 2; | 
| (...skipping 11 matching lines...) Expand all  Loading... | 
|  103   ASSERT_EQ(1u, copy_requests.count(last_pass_id)); |  104   ASSERT_EQ(1u, copy_requests.count(last_pass_id)); | 
|  104   EXPECT_FALSE(copy_called); |  105   EXPECT_FALSE(copy_called); | 
|  105   copy_requests.find(last_pass_id)->second->SendEmptyResult(); |  106   copy_requests.find(last_pass_id)->second->SendEmptyResult(); | 
|  106   EXPECT_TRUE(copy_called); |  107   EXPECT_TRUE(copy_called); | 
|  107  |  108  | 
|  108   support->EvictFrame(); |  109   support->EvictFrame(); | 
|  109 } |  110 } | 
|  110  |  111  | 
|  111 }  // namespace |  112 }  // namespace | 
|  112 }  // namespace cc |  113 }  // namespace cc | 
| OLD | NEW |