diff options
author | jamesr@chromium.org <jamesr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-01-17 06:32:36 +0000 |
---|---|---|
committer | jamesr@chromium.org <jamesr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-01-17 06:32:36 +0000 |
commit | 78d30120a3aebc0a8a7595bc0cd80b5d21cc1d51 (patch) | |
tree | f20a4a0947681a315f887860f5a6e6291ce9821c /cc | |
parent | 5c73592c918b4ef0c6c700f0ad2f1421890ad7c2 (diff) | |
download | chromium_src-78d30120a3aebc0a8a7595bc0cd80b5d21cc1d51.zip chromium_src-78d30120a3aebc0a8a7595bc0cd80b5d21cc1d51.tar.gz chromium_src-78d30120a3aebc0a8a7595bc0cd80b5d21cc1d51.tar.bz2 |
Add cc:DrawQuad type for surfaces
This quad type just carries a surface ID to be resolved later. A quad of this type will always be replaced by the quads it represents (if any) before being passed to a cc:DirectRenderer for drawing.
BUG=334090
Review URL: https://codereview.chromium.org/127373002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@245438 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'cc')
-rw-r--r-- | cc/cc.gyp | 2 | ||||
-rw-r--r-- | cc/output/gl_renderer.cc | 5 | ||||
-rw-r--r-- | cc/output/software_renderer.cc | 5 | ||||
-rw-r--r-- | cc/quads/draw_quad.cc | 4 | ||||
-rw-r--r-- | cc/quads/draw_quad.h | 5 | ||||
-rw-r--r-- | cc/quads/draw_quad_unittest.cc | 23 | ||||
-rw-r--r-- | cc/quads/surface_draw_quad.cc | 54 | ||||
-rw-r--r-- | cc/quads/surface_draw_quad.h | 43 |
8 files changed, 139 insertions, 2 deletions
@@ -293,6 +293,8 @@ 'quads/solid_color_draw_quad.h', 'quads/stream_video_draw_quad.cc', 'quads/stream_video_draw_quad.h', + 'quads/surface_draw_quad.cc', + 'quads/surface_draw_quad.h', 'quads/texture_draw_quad.cc', 'quads/texture_draw_quad.h', 'quads/tile_draw_quad.cc', diff --git a/cc/output/gl_renderer.cc b/cc/output/gl_renderer.cc index 771cfea..d9b4882 100644 --- a/cc/output/gl_renderer.cc +++ b/cc/output/gl_renderer.cc @@ -346,6 +346,11 @@ void GLRenderer::DoDrawQuad(DrawingFrame* frame, const DrawQuad* quad) { case DrawQuad::STREAM_VIDEO_CONTENT: DrawStreamVideoQuad(frame, StreamVideoDrawQuad::MaterialCast(quad)); break; + case DrawQuad::SURFACE_CONTENT: + // Surface content should be fully resolved to other quad types before + // reaching a direct renderer. + NOTREACHED(); + break; case DrawQuad::TEXTURE_CONTENT: EnqueueTextureQuad(frame, TextureDrawQuad::MaterialCast(quad)); break; diff --git a/cc/output/software_renderer.cc b/cc/output/software_renderer.cc index 0d4137b..a72df9d 100644 --- a/cc/output/software_renderer.cc +++ b/cc/output/software_renderer.cc @@ -281,6 +281,11 @@ void SoftwareRenderer::DoDrawQuad(DrawingFrame* frame, const DrawQuad* quad) { case DrawQuad::TILED_CONTENT: DrawTileQuad(frame, TileDrawQuad::MaterialCast(quad)); break; + case DrawQuad::SURFACE_CONTENT: + // Surface content should be fully resolved to other quad types before + // reaching a direct renderer. + NOTREACHED(); + break; case DrawQuad::INVALID: case DrawQuad::IO_SURFACE_CONTENT: case DrawQuad::YUV_VIDEO_CONTENT: diff --git a/cc/quads/draw_quad.cc b/cc/quads/draw_quad.cc index df19d5d..e2d6059 100644 --- a/cc/quads/draw_quad.cc +++ b/cc/quads/draw_quad.cc @@ -15,6 +15,7 @@ #include "cc/quads/render_pass_draw_quad.h" #include "cc/quads/solid_color_draw_quad.h" #include "cc/quads/stream_video_draw_quad.h" +#include "cc/quads/surface_draw_quad.h" #include "cc/quads/texture_draw_quad.h" #include "cc/quads/tile_draw_quad.h" #include "cc/quads/yuv_video_draw_quad.h" @@ -89,6 +90,9 @@ scoped_ptr<DrawQuad> DrawQuad::Copy( case STREAM_VIDEO_CONTENT: copy_quad.reset(TypedCopy<StreamVideoDrawQuad>(this)); break; + case SURFACE_CONTENT: + copy_quad.reset(TypedCopy<SurfaceDrawQuad>(this)); + break; case YUV_VIDEO_CONTENT: copy_quad.reset(TypedCopy<YUVVideoDrawQuad>(this)); break; diff --git a/cc/quads/draw_quad.h b/cc/quads/draw_quad.h index 2f15bfd..236e074 100644 --- a/cc/quads/draw_quad.h +++ b/cc/quads/draw_quad.h @@ -37,11 +37,12 @@ class CC_EXPORT DrawQuad { IO_SURFACE_CONTENT, PICTURE_CONTENT, RENDER_PASS, - TEXTURE_CONTENT, SOLID_COLOR, + STREAM_VIDEO_CONTENT, + SURFACE_CONTENT, + TEXTURE_CONTENT, TILED_CONTENT, YUV_VIDEO_CONTENT, - STREAM_VIDEO_CONTENT, }; virtual ~DrawQuad(); diff --git a/cc/quads/draw_quad_unittest.cc b/cc/quads/draw_quad_unittest.cc index 876c046..316accd 100644 --- a/cc/quads/draw_quad_unittest.cc +++ b/cc/quads/draw_quad_unittest.cc @@ -17,6 +17,7 @@ #include "cc/quads/render_pass_draw_quad.h" #include "cc/quads/solid_color_draw_quad.h" #include "cc/quads/stream_video_draw_quad.h" +#include "cc/quads/surface_draw_quad.h" #include "cc/quads/texture_draw_quad.h" #include "cc/quads/tile_draw_quad.h" #include "cc/quads/yuv_video_draw_quad.h" @@ -466,6 +467,20 @@ TEST(DrawQuadTest, CopyStreamVideoDrawQuad) { EXPECT_EQ(matrix, copy_quad->matrix); } +TEST(DrawQuadTest, CopySurfaceDrawQuad) { + int surface_id = 1234; + CREATE_SHARED_STATE(); + + CREATE_QUAD_1_NEW(SurfaceDrawQuad, surface_id); + EXPECT_EQ(DrawQuad::SURFACE_CONTENT, copy_quad->material); + EXPECT_EQ(surface_id, copy_quad->surface_id); + + CREATE_QUAD_1_ALL(SurfaceDrawQuad, surface_id); + EXPECT_EQ(DrawQuad::SURFACE_CONTENT, copy_quad->material); + EXPECT_EQ(surface_id, copy_quad->surface_id); +} + + TEST(DrawQuadTest, CopyTextureDrawQuad) { gfx::Rect opaque_rect(33, 47, 10, 12); unsigned resource_id = 82; @@ -728,6 +743,14 @@ TEST_F(DrawQuadIteratorTest, StreamVideoDrawQuad) { EXPECT_EQ(resource_id + 1, quad_new->resource_id); } +TEST_F(DrawQuadIteratorTest, SurfaceDrawQuad) { + int surface_id = 4321; + + CREATE_SHARED_STATE(); + CREATE_QUAD_1_NEW(SurfaceDrawQuad, surface_id); + EXPECT_EQ(0, IterateAndCount(quad_new.get())); +} + TEST_F(DrawQuadIteratorTest, TextureDrawQuad) { gfx::Rect opaque_rect(33, 47, 10, 12); unsigned resource_id = 82; diff --git a/cc/quads/surface_draw_quad.cc b/cc/quads/surface_draw_quad.cc new file mode 100644 index 0000000..e079108 --- /dev/null +++ b/cc/quads/surface_draw_quad.cc @@ -0,0 +1,54 @@ +// 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/quads/surface_draw_quad.h" + +#include "base/logging.h" +#include "base/values.h" + +namespace cc { + +SurfaceDrawQuad::SurfaceDrawQuad() : surface_id(0) {} + +scoped_ptr<SurfaceDrawQuad> SurfaceDrawQuad::Create() { + return make_scoped_ptr(new SurfaceDrawQuad); +} + +void SurfaceDrawQuad::SetNew(const SharedQuadState* shared_quad_state, + gfx::Rect rect, + int surface_id) { + gfx::Rect opaque_rect; + gfx::Rect visible_rect = rect; + bool needs_blending = false; + DrawQuad::SetAll(shared_quad_state, DrawQuad::SURFACE_CONTENT, rect, + opaque_rect, visible_rect, needs_blending); + this->surface_id = surface_id; +} + + +void SurfaceDrawQuad::SetAll(const SharedQuadState* shared_quad_state, + gfx::Rect rect, + gfx::Rect opaque_rect, + gfx::Rect visible_rect, + bool needs_blending, + int surface_id) { + DrawQuad::SetAll(shared_quad_state, DrawQuad::SURFACE_CONTENT, rect, + opaque_rect, visible_rect, needs_blending); + this->surface_id = surface_id; +} + +void SurfaceDrawQuad::IterateResources( + const ResourceIteratorCallback& callback) {} + +const SurfaceDrawQuad* SurfaceDrawQuad::MaterialCast(const DrawQuad* quad) { + DCHECK_EQ(quad->material, DrawQuad::SURFACE_CONTENT); + return static_cast<const SurfaceDrawQuad*>(quad); +} + +void SurfaceDrawQuad::ExtendValue(base::DictionaryValue* value) const { + value->SetInteger("surface_id", surface_id); +} + + +} // namespace cc diff --git a/cc/quads/surface_draw_quad.h b/cc/quads/surface_draw_quad.h new file mode 100644 index 0000000..b1e614122 --- /dev/null +++ b/cc/quads/surface_draw_quad.h @@ -0,0 +1,43 @@ +// 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_QUADS_SURFACE_DRAW_QUAD_H_ +#define CC_QUADS_SURFACE_DRAW_QUAD_H_ + +#include "base/memory/scoped_ptr.h" +#include "cc/base/cc_export.h" +#include "cc/quads/draw_quad.h" + +namespace cc { + +class CC_EXPORT SurfaceDrawQuad : public DrawQuad { + public: + static scoped_ptr<SurfaceDrawQuad> Create(); + + void SetNew(const SharedQuadState* shared_quad_state, + gfx::Rect rect, + int surface_id); + + void SetAll(const SharedQuadState* shared_quad_state, + gfx::Rect rect, + gfx::Rect opaque_rect, + gfx::Rect visible_rect, + bool needs_blending, + int surface_id); + + int surface_id; + + virtual void IterateResources(const ResourceIteratorCallback& callback) + OVERRIDE; + + static const SurfaceDrawQuad* MaterialCast(const DrawQuad* quad); + + private: + SurfaceDrawQuad(); + virtual void ExtendValue(base::DictionaryValue* value) const OVERRIDE; +}; + +} // namespace cc + +#endif // CC_QUADS_SURFACE_DRAW_QUAD_H_ |