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

Side by Side Diff: cc/software_renderer.cc

Issue 11348371: cc: Move WebCompositorOutputSurface and related classes into cc/ (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: mynits Created 8 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 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/software_renderer.h" 5 #include "cc/software_renderer.h"
6 6
7 #include <public/WebCompositorSoftwareOutputDevice.h>
8 #include <public/WebImage.h> 7 #include <public/WebImage.h>
9 #include <public/WebSize.h>
10 8
11 #include "base/debug/trace_event.h" 9 #include "base/debug/trace_event.h"
12 #include "cc/debug_border_draw_quad.h" 10 #include "cc/debug_border_draw_quad.h"
13 #include "cc/math_util.h" 11 #include "cc/math_util.h"
14 #include "cc/render_pass_draw_quad.h" 12 #include "cc/render_pass_draw_quad.h"
13 #include "cc/software_output_device.h"
15 #include "cc/solid_color_draw_quad.h" 14 #include "cc/solid_color_draw_quad.h"
16 #include "cc/texture_draw_quad.h" 15 #include "cc/texture_draw_quad.h"
17 #include "cc/tile_draw_quad.h" 16 #include "cc/tile_draw_quad.h"
18 #include "third_party/skia/include/core/SkCanvas.h" 17 #include "third_party/skia/include/core/SkCanvas.h"
19 #include "third_party/skia/include/core/SkColor.h" 18 #include "third_party/skia/include/core/SkColor.h"
20 #include "third_party/skia/include/core/SkMatrix.h" 19 #include "third_party/skia/include/core/SkMatrix.h"
21 #include "third_party/skia/include/core/SkShader.h" 20 #include "third_party/skia/include/core/SkShader.h"
22 #include "third_party/skia/include/effects/SkLayerRasterizer.h" 21 #include "third_party/skia/include/effects/SkLayerRasterizer.h"
23 #include "ui/gfx/rect_conversions.h" 22 #include "ui/gfx/rect_conversions.h"
24 #include "ui/gfx/skia_util.h" 23 #include "ui/gfx/skia_util.h"
25 #include "ui/gfx/transform.h" 24 #include "ui/gfx/transform.h"
26 25
27 using WebKit::WebCompositorSoftwareOutputDevice;
28 using WebKit::WebSize;
29
30 namespace cc { 26 namespace cc {
31 27
32 namespace { 28 namespace {
33 29
34 void toSkMatrix(SkMatrix* flattened, const gfx::Transform& m) 30 void toSkMatrix(SkMatrix* flattened, const gfx::Transform& m)
35 { 31 {
36 // Convert from 4x4 to 3x3 by dropping the third row and column. 32 // Convert from 4x4 to 3x3 by dropping the third row and column.
37 flattened->set(0, SkDoubleToScalar(m.matrix().getDouble(0, 0))); 33 flattened->set(0, SkDoubleToScalar(m.matrix().getDouble(0, 0)));
38 flattened->set(1, SkDoubleToScalar(m.matrix().getDouble(0, 1))); 34 flattened->set(1, SkDoubleToScalar(m.matrix().getDouble(0, 1)));
39 flattened->set(2, SkDoubleToScalar(m.matrix().getDouble(0, 3))); 35 flattened->set(2, SkDoubleToScalar(m.matrix().getDouble(0, 3)));
40 flattened->set(3, SkDoubleToScalar(m.matrix().getDouble(1, 0))); 36 flattened->set(3, SkDoubleToScalar(m.matrix().getDouble(1, 0)));
41 flattened->set(4, SkDoubleToScalar(m.matrix().getDouble(1, 1))); 37 flattened->set(4, SkDoubleToScalar(m.matrix().getDouble(1, 1)));
42 flattened->set(5, SkDoubleToScalar(m.matrix().getDouble(1, 3))); 38 flattened->set(5, SkDoubleToScalar(m.matrix().getDouble(1, 3)));
43 flattened->set(6, SkDoubleToScalar(m.matrix().getDouble(3, 0))); 39 flattened->set(6, SkDoubleToScalar(m.matrix().getDouble(3, 0)));
44 flattened->set(7, SkDoubleToScalar(m.matrix().getDouble(3, 1))); 40 flattened->set(7, SkDoubleToScalar(m.matrix().getDouble(3, 1)));
45 flattened->set(8, SkDoubleToScalar(m.matrix().getDouble(3, 3))); 41 flattened->set(8, SkDoubleToScalar(m.matrix().getDouble(3, 3)));
46 } 42 }
47 43
48 bool isScaleAndTranslate(const SkMatrix& matrix) 44 bool isScaleAndTranslate(const SkMatrix& matrix)
49 { 45 {
50 return SkScalarNearlyZero(matrix[SkMatrix::kMSkewX]) && 46 return SkScalarNearlyZero(matrix[SkMatrix::kMSkewX]) &&
51 SkScalarNearlyZero(matrix[SkMatrix::kMSkewY]) && 47 SkScalarNearlyZero(matrix[SkMatrix::kMSkewY]) &&
52 SkScalarNearlyZero(matrix[SkMatrix::kMPersp0]) && 48 SkScalarNearlyZero(matrix[SkMatrix::kMPersp0]) &&
53 SkScalarNearlyZero(matrix[SkMatrix::kMPersp1]) && 49 SkScalarNearlyZero(matrix[SkMatrix::kMPersp1]) &&
54 SkScalarNearlyZero(matrix[SkMatrix::kMPersp2] - 1.0f); 50 SkScalarNearlyZero(matrix[SkMatrix::kMPersp2] - 1.0f);
55 } 51 }
56 52
57 } // anonymous namespace 53 } // anonymous namespace
58 54
59 scoped_ptr<SoftwareRenderer> SoftwareRenderer::create(RendererClient* client, Re sourceProvider* resourceProvider, WebCompositorSoftwareOutputDevice* outputDevic e) 55 scoped_ptr<SoftwareRenderer> SoftwareRenderer::create(RendererClient* client, Re sourceProvider* resourceProvider, SoftwareOutputDevice* outputDevice)
60 { 56 {
61 return make_scoped_ptr(new SoftwareRenderer(client, resourceProvider, output Device)); 57 return make_scoped_ptr(new SoftwareRenderer(client, resourceProvider, output Device));
62 } 58 }
63 59
64 SoftwareRenderer::SoftwareRenderer(RendererClient* client, ResourceProvider* res ourceProvider, WebCompositorSoftwareOutputDevice* outputDevice) 60 SoftwareRenderer::SoftwareRenderer(RendererClient* client, ResourceProvider* res ourceProvider, SoftwareOutputDevice* outputDevice)
65 : DirectRenderer(client, resourceProvider) 61 : DirectRenderer(client, resourceProvider)
66 , m_visible(true) 62 , m_visible(true)
67 , m_outputDevice(outputDevice) 63 , m_outputDevice(outputDevice)
68 , m_skCurrentCanvas(0) 64 , m_skCurrentCanvas(0)
69 { 65 {
70 m_resourceProvider->setDefaultResourceType(ResourceProvider::Bitmap); 66 m_resourceProvider->setDefaultResourceType(ResourceProvider::Bitmap);
71 67
72 m_capabilities.maxTextureSize = INT_MAX; 68 m_capabilities.maxTextureSize = INT_MAX;
73 m_capabilities.bestTextureFormat = GL_RGBA; 69 m_capabilities.bestTextureFormat = GL_RGBA;
74 m_capabilities.contextHasCachedFrontBuffer = true; 70 m_capabilities.contextHasCachedFrontBuffer = true;
75 m_capabilities.usingSetVisibility = true; 71 m_capabilities.usingSetVisibility = true;
76 72
77 viewportChanged(); 73 viewportChanged();
78 } 74 }
79 75
80 SoftwareRenderer::~SoftwareRenderer() 76 SoftwareRenderer::~SoftwareRenderer()
81 { 77 {
82 } 78 }
83 79
84 const RendererCapabilities& SoftwareRenderer::capabilities() const 80 const RendererCapabilities& SoftwareRenderer::capabilities() const
85 { 81 {
86 return m_capabilities; 82 return m_capabilities;
87 } 83 }
88 84
89 void SoftwareRenderer::viewportChanged() 85 void SoftwareRenderer::viewportChanged()
90 { 86 {
91 m_outputDevice->didChangeViewportSize(WebSize(viewportSize().width(), viewpo rtSize().height())); 87 m_outputDevice->DidChangeViewportSize(viewportSize());
92 } 88 }
93 89
94 void SoftwareRenderer::beginDrawingFrame(DrawingFrame& frame) 90 void SoftwareRenderer::beginDrawingFrame(DrawingFrame& frame)
95 { 91 {
96 TRACE_EVENT0("cc", "SoftwareRenderer::beginDrawingFrame"); 92 TRACE_EVENT0("cc", "SoftwareRenderer::beginDrawingFrame");
97 m_skRootCanvas = make_scoped_ptr(new SkCanvas(m_outputDevice->lock(true)->ge tSkBitmap())); 93 m_skRootCanvas = make_scoped_ptr(new SkCanvas(m_outputDevice->Lock(true)->ge tSkBitmap()));
98 } 94 }
99 95
100 void SoftwareRenderer::finishDrawingFrame(DrawingFrame& frame) 96 void SoftwareRenderer::finishDrawingFrame(DrawingFrame& frame)
101 { 97 {
102 TRACE_EVENT0("cc", "SoftwareRenderer::finishDrawingFrame"); 98 TRACE_EVENT0("cc", "SoftwareRenderer::finishDrawingFrame");
103 m_currentFramebufferLock.reset(); 99 m_currentFramebufferLock.reset();
104 m_skCurrentCanvas = 0; 100 m_skCurrentCanvas = 0;
105 m_skRootCanvas.reset(); 101 m_skRootCanvas.reset();
106 m_outputDevice->unlock(); 102 m_outputDevice->Unlock();
107 } 103 }
108 104
109 bool SoftwareRenderer::flippedFramebuffer() const 105 bool SoftwareRenderer::flippedFramebuffer() const
110 { 106 {
111 return false; 107 return false;
112 } 108 }
113 109
114 void SoftwareRenderer::ensureScissorTestEnabled() 110 void SoftwareRenderer::ensureScissorTestEnabled()
115 { 111 {
116 // Nothing to do here. Current implementation of software rendering has no 112 // Nothing to do here. Current implementation of software rendering has no
(...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after
362 bool SoftwareRenderer::swapBuffers() 358 bool SoftwareRenderer::swapBuffers()
363 { 359 {
364 if (m_client->hasImplThread()) 360 if (m_client->hasImplThread())
365 m_client->onSwapBuffersComplete(); 361 m_client->onSwapBuffersComplete();
366 return true; 362 return true;
367 } 363 }
368 364
369 void SoftwareRenderer::getFramebufferPixels(void *pixels, const gfx::Rect& rect) 365 void SoftwareRenderer::getFramebufferPixels(void *pixels, const gfx::Rect& rect)
370 { 366 {
371 TRACE_EVENT0("cc", "SoftwareRenderer::getFramebufferPixels"); 367 TRACE_EVENT0("cc", "SoftwareRenderer::getFramebufferPixels");
372 SkBitmap fullBitmap = m_outputDevice->lock(false)->getSkBitmap(); 368 SkBitmap fullBitmap = m_outputDevice->Lock(false)->getSkBitmap();
373 SkBitmap subsetBitmap; 369 SkBitmap subsetBitmap;
374 SkIRect invertRect = SkIRect::MakeXYWH(rect.x(), viewportSize().height() - r ect.bottom(), rect.width(), rect.height()); 370 SkIRect invertRect = SkIRect::MakeXYWH(rect.x(), viewportSize().height() - r ect.bottom(), rect.width(), rect.height());
375 fullBitmap.extractSubset(&subsetBitmap, invertRect); 371 fullBitmap.extractSubset(&subsetBitmap, invertRect);
376 subsetBitmap.copyPixelsTo(pixels, rect.width() * rect.height() * 4, rect.wid th() * 4); 372 subsetBitmap.copyPixelsTo(pixels, rect.width() * rect.height() * 4, rect.wid th() * 4);
377 m_outputDevice->unlock(); 373 m_outputDevice->Unlock();
378 } 374 }
379 375
380 void SoftwareRenderer::setVisible(bool visible) 376 void SoftwareRenderer::setVisible(bool visible)
381 { 377 {
382 if (m_visible == visible) 378 if (m_visible == visible)
383 return; 379 return;
384 m_visible = visible; 380 m_visible = visible;
385 } 381 }
386 382
387 } // namespace cc 383 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698