summaryrefslogtreecommitdiffstats
path: root/cc
diff options
context:
space:
mode:
authorjamesr@chromium.org <jamesr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-01-17 06:32:36 +0000
committerjamesr@chromium.org <jamesr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-01-17 06:32:36 +0000
commit78d30120a3aebc0a8a7595bc0cd80b5d21cc1d51 (patch)
treef20a4a0947681a315f887860f5a6e6291ce9821c /cc
parent5c73592c918b4ef0c6c700f0ad2f1421890ad7c2 (diff)
downloadchromium_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.gyp2
-rw-r--r--cc/output/gl_renderer.cc5
-rw-r--r--cc/output/software_renderer.cc5
-rw-r--r--cc/quads/draw_quad.cc4
-rw-r--r--cc/quads/draw_quad.h5
-rw-r--r--cc/quads/draw_quad_unittest.cc23
-rw-r--r--cc/quads/surface_draw_quad.cc54
-rw-r--r--cc/quads/surface_draw_quad.h43
8 files changed, 139 insertions, 2 deletions
diff --git a/cc/cc.gyp b/cc/cc.gyp
index f025568..4e85ae5 100644
--- a/cc/cc.gyp
+++ b/cc/cc.gyp
@@ -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_