summaryrefslogtreecommitdiffstats
path: root/cc
diff options
context:
space:
mode:
authorvmpstr@chromium.org <vmpstr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-03-14 19:33:53 +0000
committervmpstr@chromium.org <vmpstr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-03-14 19:33:53 +0000
commitf53befdf0c64f5b645f0bd915d07d897d6ad6986 (patch)
treed59c1e22389a03d822eee5318edcd9a829da6afe /cc
parent0b822f208263d15b9eca6b40ab9816a62879c09c (diff)
downloadchromium_src-f53befdf0c64f5b645f0bd915d07d897d6ad6986.zip
chromium_src-f53befdf0c64f5b645f0bd915d07d897d6ad6986.tar.gz
chromium_src-f53befdf0c64f5b645f0bd915d07d897d6ad6986.tar.bz2
cc: Fix to rasterize on demand with multiple worker threads.
This patch fixes an issue that can occur if we're using more than one raster worker thread. In that case, we have to use the picture pile clone appropriate for our thread. BUG=351826 R=reveman@chromium.org Review URL: https://codereview.chromium.org/195993003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@257176 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'cc')
-rw-r--r--cc/output/gl_renderer.cc8
-rw-r--r--cc/output/renderer_pixeltest.cc16
-rw-r--r--cc/output/software_renderer.cc7
3 files changed, 20 insertions, 11 deletions
diff --git a/cc/output/gl_renderer.cc b/cc/output/gl_renderer.cc
index a262e37..b388505 100644
--- a/cc/output/gl_renderer.cc
+++ b/cc/output/gl_renderer.cc
@@ -96,8 +96,12 @@ class OnDemandRasterTaskImpl : public internal::Task {
virtual void RunOnWorkerThread(unsigned thread_index) OVERRIDE {
TRACE_EVENT0("cc", "OnDemandRasterTaskImpl::RunOnWorkerThread");
SkCanvas canvas(*bitmap_);
- picture_pile_->RasterToBitmap(
- &canvas, content_rect_, contents_scale_, NULL);
+
+ PicturePileImpl* picture_pile =
+ picture_pile_->GetCloneForDrawingOnThread(thread_index);
+ DCHECK(picture_pile);
+
+ picture_pile->RasterToBitmap(&canvas, content_rect_, contents_scale_, NULL);
}
protected:
diff --git a/cc/output/renderer_pixeltest.cc b/cc/output/renderer_pixeltest.cc
index d934d17..1165f9a 100644
--- a/cc/output/renderer_pixeltest.cc
+++ b/cc/output/renderer_pixeltest.cc
@@ -1663,7 +1663,7 @@ TYPED_TEST(RendererPixelTest, PictureDrawQuadIdentityScale) {
texture_format,
viewport,
1.f,
- blue_pile);
+ PicturePileImpl::CreateFromOther(blue_pile));
pass->quad_list.push_back(blue_quad.PassAs<DrawQuad>());
// One viewport-filling green quad.
@@ -1688,7 +1688,7 @@ TYPED_TEST(RendererPixelTest, PictureDrawQuadIdentityScale) {
texture_format,
viewport,
1.f,
- green_pile);
+ PicturePileImpl::CreateFromOther(green_pile));
pass->quad_list.push_back(green_quad.PassAs<DrawQuad>());
RenderPassList pass_list;
@@ -1735,7 +1735,7 @@ TYPED_TEST(RendererPixelTest, PictureDrawQuadOpacity) {
texture_format,
viewport,
1.f,
- green_pile);
+ PicturePileImpl::CreateFromOther(green_pile));
pass->quad_list.push_back(green_quad.PassAs<DrawQuad>());
// One viewport-filling white quad.
@@ -1760,7 +1760,7 @@ TYPED_TEST(RendererPixelTest, PictureDrawQuadOpacity) {
texture_format,
viewport,
1.f,
- white_pile);
+ PicturePileImpl::CreateFromOther(white_pile));
pass->quad_list.push_back(white_quad.PassAs<DrawQuad>());
RenderPassList pass_list;
@@ -1837,7 +1837,7 @@ TYPED_TEST(RendererPixelTest, PictureDrawQuadDisableImageFiltering) {
texture_format,
viewport,
1.f,
- pile);
+ PicturePileImpl::CreateFromOther(pile));
pass->quad_list.push_back(quad.PassAs<DrawQuad>());
RenderPassList pass_list;
@@ -1894,7 +1894,7 @@ TYPED_TEST(RendererPixelTest, PictureDrawQuadNonIdentityScale) {
texture_format,
green_rect1,
1.f,
- green_pile);
+ PicturePileImpl::CreateFromOther(green_pile));
pass->quad_list.push_back(green_quad1.PassAs<DrawQuad>());
scoped_ptr<PictureDrawQuad> green_quad2 = PictureDrawQuad::Create();
@@ -1907,7 +1907,7 @@ TYPED_TEST(RendererPixelTest, PictureDrawQuadNonIdentityScale) {
texture_format,
green_rect2,
1.f,
- green_pile);
+ PicturePileImpl::CreateFromOther(green_pile));
pass->quad_list.push_back(green_quad2.PassAs<DrawQuad>());
// Add a green clipped checkerboard in the bottom right to help test
@@ -1982,7 +1982,7 @@ TYPED_TEST(RendererPixelTest, PictureDrawQuadNonIdentityScale) {
texture_format,
content_union_rect,
contents_scale,
- pile);
+ PicturePileImpl::CreateFromOther(pile));
pass->quad_list.push_back(blue_quad.PassAs<DrawQuad>());
// Fill left half of viewport with green.
diff --git a/cc/output/software_renderer.cc b/cc/output/software_renderer.cc
index 672f8fe..04067a0 100644
--- a/cc/output/software_renderer.cc
+++ b/cc/output/software_renderer.cc
@@ -53,7 +53,12 @@ class OnDemandRasterTaskImpl : public internal::Task {
// Overridden from internal::Task:
virtual void RunOnWorkerThread(unsigned thread_index) OVERRIDE {
TRACE_EVENT0("cc", "OnDemandRasterTaskImpl::RunOnWorkerThread");
- picture_pile_->RasterDirect(canvas_, content_rect_, contents_scale_, NULL);
+
+ PicturePileImpl* picture_pile =
+ picture_pile_->GetCloneForDrawingOnThread(thread_index);
+ DCHECK(picture_pile);
+
+ picture_pile->RasterDirect(canvas_, content_rect_, contents_scale_, NULL);
}
protected: