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

Unified Diff: cc/surfaces/surfaces_pixeltest.cc

Issue 1531403002: Revert "Delete CC." (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 5 years 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « cc/surfaces/surfaces_export.h ('k') | cc/test/DEPS » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/surfaces/surfaces_pixeltest.cc
diff --git a/cc/surfaces/surfaces_pixeltest.cc b/cc/surfaces/surfaces_pixeltest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..528684b2c85546adc35dd268fccf64b424e4861e
--- /dev/null
+++ b/cc/surfaces/surfaces_pixeltest.cc
@@ -0,0 +1,340 @@
+// 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/output/compositor_frame.h"
+#include "cc/quads/render_pass.h"
+#include "cc/quads/solid_color_draw_quad.h"
+#include "cc/quads/surface_draw_quad.h"
+#include "cc/surfaces/surface.h"
+#include "cc/surfaces/surface_aggregator.h"
+#include "cc/surfaces/surface_factory.h"
+#include "cc/surfaces/surface_factory_client.h"
+#include "cc/surfaces/surface_id_allocator.h"
+#include "cc/surfaces/surface_manager.h"
+#include "cc/test/pixel_comparator.h"
+#include "cc/test/pixel_test.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+#if !defined(OS_ANDROID)
+
+namespace cc {
+namespace {
+
+class EmptySurfaceFactoryClient : public SurfaceFactoryClient {
+ public:
+ void ReturnResources(const ReturnedResourceArray& resources) override {}
+};
+
+class SurfacesPixelTest : public RendererPixelTest<GLRenderer> {
+ public:
+ SurfacesPixelTest() : allocator_(1u), factory_(&manager_, &client_) {}
+
+ protected:
+ SurfaceManager manager_;
+ SurfaceIdAllocator allocator_;
+ EmptySurfaceFactoryClient client_;
+ SurfaceFactory factory_;
+};
+
+SharedQuadState* CreateAndAppendTestSharedQuadState(
+ RenderPass* render_pass,
+ const gfx::Transform& transform,
+ const gfx::Size& size) {
+ const gfx::Size content_bounds = size;
+ const gfx::Rect visible_content_rect = gfx::Rect(size);
+ const gfx::Rect clip_rect = gfx::Rect(size);
+ bool is_clipped = false;
+ float opacity = 1.f;
+ const SkXfermode::Mode blend_mode = SkXfermode::kSrcOver_Mode;
+ SharedQuadState* shared_state = render_pass->CreateAndAppendSharedQuadState();
+ shared_state->SetAll(transform,
+ content_bounds,
+ visible_content_rect,
+ clip_rect,
+ is_clipped,
+ opacity,
+ blend_mode,
+ 0);
+ return shared_state;
+}
+
+// Draws a very simple frame with no surface references.
+TEST_F(SurfacesPixelTest, DrawSimpleFrame) {
+ gfx::Rect rect(device_viewport_size_);
+ RenderPassId id(1, 1);
+ scoped_ptr<RenderPass> pass = RenderPass::Create();
+ pass->SetNew(id, rect, rect, gfx::Transform());
+
+ CreateAndAppendTestSharedQuadState(
+ pass.get(), gfx::Transform(), device_viewport_size_);
+
+ SolidColorDrawQuad* color_quad =
+ pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
+ bool force_anti_aliasing_off = false;
+ color_quad->SetNew(pass->shared_quad_state_list.back(),
+ rect,
+ rect,
+ SK_ColorGREEN,
+ force_anti_aliasing_off);
+
+ scoped_ptr<DelegatedFrameData> delegated_frame_data(new DelegatedFrameData);
+ delegated_frame_data->render_pass_list.push_back(pass.Pass());
+
+ scoped_ptr<CompositorFrame> root_frame(new CompositorFrame);
+ root_frame->delegated_frame_data = delegated_frame_data.Pass();
+
+ SurfaceId root_surface_id = allocator_.GenerateId();
+ factory_.Create(root_surface_id);
+ factory_.SubmitFrame(root_surface_id, root_frame.Pass(),
+ SurfaceFactory::DrawCallback());
+
+ SurfaceAggregator aggregator(&manager_, resource_provider_.get());
+ scoped_ptr<CompositorFrame> aggregated_frame =
+ aggregator.Aggregate(root_surface_id);
+ factory_.Destroy(root_surface_id);
+
+ bool discard_alpha = false;
+ ExactPixelComparator pixel_comparator(discard_alpha);
+ RenderPassList* pass_list =
+ &aggregated_frame->delegated_frame_data->render_pass_list;
+ EXPECT_TRUE(RunPixelTest(pass_list,
+ base::FilePath(FILE_PATH_LITERAL("green.png")),
+ pixel_comparator));
+}
+
+// Draws a frame with simple surface embedding.
+TEST_F(SurfacesPixelTest, DrawSimpleAggregatedFrame) {
+ gfx::Size child_size(200, 100);
+ SurfaceId child_surface_id = allocator_.GenerateId();
+ SurfaceId root_surface_id = allocator_.GenerateId();
+ factory_.Create(child_surface_id);
+ factory_.Create(root_surface_id);
+ {
+ gfx::Rect rect(device_viewport_size_);
+ RenderPassId id(1, 1);
+ scoped_ptr<RenderPass> pass = RenderPass::Create();
+ pass->SetNew(id, rect, rect, gfx::Transform());
+
+ CreateAndAppendTestSharedQuadState(
+ pass.get(), gfx::Transform(), device_viewport_size_);
+
+ SurfaceDrawQuad* surface_quad =
+ pass->CreateAndAppendDrawQuad<SurfaceDrawQuad>();
+ surface_quad->SetNew(pass->shared_quad_state_list.back(),
+ gfx::Rect(child_size),
+ gfx::Rect(child_size),
+ child_surface_id);
+
+ SolidColorDrawQuad* color_quad =
+ pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
+ bool force_anti_aliasing_off = false;
+ color_quad->SetNew(pass->shared_quad_state_list.back(),
+ rect,
+ rect,
+ SK_ColorYELLOW,
+ force_anti_aliasing_off);
+
+ scoped_ptr<DelegatedFrameData> delegated_frame_data(new DelegatedFrameData);
+ delegated_frame_data->render_pass_list.push_back(pass.Pass());
+
+ scoped_ptr<CompositorFrame> root_frame(new CompositorFrame);
+ root_frame->delegated_frame_data = delegated_frame_data.Pass();
+
+ factory_.SubmitFrame(root_surface_id, root_frame.Pass(),
+ SurfaceFactory::DrawCallback());
+ }
+
+ {
+ gfx::Rect rect(child_size);
+ RenderPassId id(1, 1);
+ scoped_ptr<RenderPass> pass = RenderPass::Create();
+ pass->SetNew(id, rect, rect, gfx::Transform());
+
+ CreateAndAppendTestSharedQuadState(
+ pass.get(), gfx::Transform(), child_size);
+
+ SolidColorDrawQuad* color_quad =
+ pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
+ bool force_anti_aliasing_off = false;
+ color_quad->SetNew(pass->shared_quad_state_list.back(),
+ rect,
+ rect,
+ SK_ColorBLUE,
+ force_anti_aliasing_off);
+
+ scoped_ptr<DelegatedFrameData> delegated_frame_data(new DelegatedFrameData);
+ delegated_frame_data->render_pass_list.push_back(pass.Pass());
+
+ scoped_ptr<CompositorFrame> child_frame(new CompositorFrame);
+ child_frame->delegated_frame_data = delegated_frame_data.Pass();
+
+ factory_.SubmitFrame(child_surface_id, child_frame.Pass(),
+ SurfaceFactory::DrawCallback());
+ }
+
+ SurfaceAggregator aggregator(&manager_, resource_provider_.get());
+ scoped_ptr<CompositorFrame> aggregated_frame =
+ aggregator.Aggregate(root_surface_id);
+
+ bool discard_alpha = false;
+ ExactPixelComparator pixel_comparator(discard_alpha);
+ RenderPassList* pass_list =
+ &aggregated_frame->delegated_frame_data->render_pass_list;
+ EXPECT_TRUE(RunPixelTest(pass_list,
+ base::FilePath(FILE_PATH_LITERAL("blue_yellow.png")),
+ pixel_comparator));
+ factory_.Destroy(root_surface_id);
+ factory_.Destroy(child_surface_id);
+}
+
+// Tests a surface quad that has a non-identity transform into its pass.
+TEST_F(SurfacesPixelTest, DrawAggregatedFrameWithSurfaceTransforms) {
+ gfx::Size child_size(100, 200);
+ gfx::Size quad_size(100, 100);
+ // Structure:
+ // root (200x200) -> left_child (100x200 @ 0x0,
+ // right_child (100x200 @ 0x100)
+ // left_child -> top_green_quad (100x100 @ 0x0),
+ // bottom_blue_quad (100x100 @ 0x100)
+ // right_child -> top_blue_quad (100x100 @ 0x0),
+ // bottom_green_quad (100x100 @ 0x100)
+ SurfaceId left_child_id = allocator_.GenerateId();
+ SurfaceId right_child_id = allocator_.GenerateId();
+ SurfaceId root_surface_id = allocator_.GenerateId();
+ factory_.Create(left_child_id);
+ factory_.Create(right_child_id);
+ factory_.Create(root_surface_id);
+
+ {
+ gfx::Rect rect(device_viewport_size_);
+ RenderPassId id(1, 1);
+ scoped_ptr<RenderPass> pass = RenderPass::Create();
+ pass->SetNew(id, rect, rect, gfx::Transform());
+
+ gfx::Transform surface_transform;
+ CreateAndAppendTestSharedQuadState(
+ pass.get(), surface_transform, device_viewport_size_);
+
+ SurfaceDrawQuad* left_surface_quad =
+ pass->CreateAndAppendDrawQuad<SurfaceDrawQuad>();
+ left_surface_quad->SetNew(pass->shared_quad_state_list.back(),
+ gfx::Rect(child_size),
+ gfx::Rect(child_size),
+ left_child_id);
+
+ surface_transform.Translate(100, 0);
+ CreateAndAppendTestSharedQuadState(
+ pass.get(), surface_transform, device_viewport_size_);
+
+ SurfaceDrawQuad* right_surface_quad =
+ pass->CreateAndAppendDrawQuad<SurfaceDrawQuad>();
+ right_surface_quad->SetNew(pass->shared_quad_state_list.back(),
+ gfx::Rect(child_size),
+ gfx::Rect(child_size),
+ right_child_id);
+
+ scoped_ptr<DelegatedFrameData> delegated_frame_data(new DelegatedFrameData);
+ delegated_frame_data->render_pass_list.push_back(pass.Pass());
+
+ scoped_ptr<CompositorFrame> root_frame(new CompositorFrame);
+ root_frame->delegated_frame_data = delegated_frame_data.Pass();
+
+ factory_.SubmitFrame(root_surface_id, root_frame.Pass(),
+ SurfaceFactory::DrawCallback());
+ }
+
+ {
+ gfx::Rect rect(child_size);
+ RenderPassId id(1, 1);
+ scoped_ptr<RenderPass> pass = RenderPass::Create();
+ pass->SetNew(id, rect, rect, gfx::Transform());
+
+ CreateAndAppendTestSharedQuadState(
+ pass.get(), gfx::Transform(), child_size);
+
+ SolidColorDrawQuad* top_color_quad =
+ pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
+ bool force_anti_aliasing_off = false;
+ top_color_quad->SetNew(pass->shared_quad_state_list.back(),
+ gfx::Rect(quad_size),
+ gfx::Rect(quad_size),
+ SK_ColorGREEN,
+ force_anti_aliasing_off);
+
+ SolidColorDrawQuad* bottom_color_quad =
+ pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
+ bottom_color_quad->SetNew(pass->shared_quad_state_list.back(),
+ gfx::Rect(0, 100, 100, 100),
+ gfx::Rect(0, 100, 100, 100),
+ SK_ColorBLUE,
+ force_anti_aliasing_off);
+
+ scoped_ptr<DelegatedFrameData> delegated_frame_data(new DelegatedFrameData);
+ delegated_frame_data->render_pass_list.push_back(pass.Pass());
+
+ scoped_ptr<CompositorFrame> child_frame(new CompositorFrame);
+ child_frame->delegated_frame_data = delegated_frame_data.Pass();
+
+ factory_.SubmitFrame(left_child_id, child_frame.Pass(),
+ SurfaceFactory::DrawCallback());
+ }
+
+ {
+ gfx::Rect rect(child_size);
+ RenderPassId id(1, 1);
+ scoped_ptr<RenderPass> pass = RenderPass::Create();
+ pass->SetNew(id, rect, rect, gfx::Transform());
+
+ CreateAndAppendTestSharedQuadState(
+ pass.get(), gfx::Transform(), child_size);
+
+ SolidColorDrawQuad* top_color_quad =
+ pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
+ bool force_anti_aliasing_off = false;
+ top_color_quad->SetNew(pass->shared_quad_state_list.back(),
+ gfx::Rect(quad_size),
+ gfx::Rect(quad_size),
+ SK_ColorBLUE,
+ force_anti_aliasing_off);
+
+ SolidColorDrawQuad* bottom_color_quad =
+ pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
+ bottom_color_quad->SetNew(pass->shared_quad_state_list.back(),
+ gfx::Rect(0, 100, 100, 100),
+ gfx::Rect(0, 100, 100, 100),
+ SK_ColorGREEN,
+ force_anti_aliasing_off);
+
+ scoped_ptr<DelegatedFrameData> delegated_frame_data(new DelegatedFrameData);
+ delegated_frame_data->render_pass_list.push_back(pass.Pass());
+
+ scoped_ptr<CompositorFrame> child_frame(new CompositorFrame);
+ child_frame->delegated_frame_data = delegated_frame_data.Pass();
+
+ factory_.SubmitFrame(right_child_id, child_frame.Pass(),
+ SurfaceFactory::DrawCallback());
+ }
+
+ SurfaceAggregator aggregator(&manager_, resource_provider_.get());
+ scoped_ptr<CompositorFrame> aggregated_frame =
+ aggregator.Aggregate(root_surface_id);
+
+ bool discard_alpha = false;
+ ExactPixelComparator pixel_comparator(discard_alpha);
+ RenderPassList* pass_list =
+ &aggregated_frame->delegated_frame_data->render_pass_list;
+ EXPECT_TRUE(RunPixelTest(
+ pass_list,
+ base::FilePath(FILE_PATH_LITERAL("four_blue_green_checkers.png")),
+ pixel_comparator));
+
+ factory_.Destroy(root_surface_id);
+ factory_.Destroy(left_child_id);
+ factory_.Destroy(right_child_id);
+}
+
+} // namespace
+} // namespace cc
+
+#endif // !defined(OS_ANDROID)
« no previous file with comments | « cc/surfaces/surfaces_export.h ('k') | cc/test/DEPS » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698