OLD | NEW |
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 "base/debug/trace_event.h" |
7 #include "cc/debug_border_draw_quad.h" | 8 #include "cc/debug_border_draw_quad.h" |
8 #include "cc/render_pass_draw_quad.h" | 9 #include "cc/render_pass_draw_quad.h" |
9 #include "cc/solid_color_draw_quad.h" | 10 #include "cc/solid_color_draw_quad.h" |
10 #include "cc/texture_draw_quad.h" | 11 #include "cc/texture_draw_quad.h" |
11 #include "cc/tile_draw_quad.h" | 12 #include "cc/tile_draw_quad.h" |
12 #include "third_party/skia/include/core/SkCanvas.h" | 13 #include "third_party/skia/include/core/SkCanvas.h" |
13 #include "third_party/skia/include/core/SkColor.h" | 14 #include "third_party/skia/include/core/SkColor.h" |
14 #include "third_party/skia/include/core/SkMatrix.h" | 15 #include "third_party/skia/include/core/SkMatrix.h" |
15 #include "third_party/skia/include/core/SkShader.h" | 16 #include "third_party/skia/include/core/SkShader.h" |
16 #include "third_party/skia/include/effects/SkLayerRasterizer.h" | 17 #include "third_party/skia/include/effects/SkLayerRasterizer.h" |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
84 return m_capabilities; | 85 return m_capabilities; |
85 } | 86 } |
86 | 87 |
87 void SoftwareRenderer::viewportChanged() | 88 void SoftwareRenderer::viewportChanged() |
88 { | 89 { |
89 m_outputDevice->didChangeViewportSize(WebSize(viewportSize().width(), viewpo
rtSize().height())); | 90 m_outputDevice->didChangeViewportSize(WebSize(viewportSize().width(), viewpo
rtSize().height())); |
90 } | 91 } |
91 | 92 |
92 void SoftwareRenderer::beginDrawingFrame(DrawingFrame& frame) | 93 void SoftwareRenderer::beginDrawingFrame(DrawingFrame& frame) |
93 { | 94 { |
| 95 TRACE_EVENT0("cc", "SoftwareRenderer::beginDrawingFrame"); |
94 m_skRootCanvas = make_scoped_ptr(new SkCanvas(m_outputDevice->lock(true)->ge
tSkBitmap())); | 96 m_skRootCanvas = make_scoped_ptr(new SkCanvas(m_outputDevice->lock(true)->ge
tSkBitmap())); |
95 } | 97 } |
96 | 98 |
97 void SoftwareRenderer::finishDrawingFrame(DrawingFrame& frame) | 99 void SoftwareRenderer::finishDrawingFrame(DrawingFrame& frame) |
98 { | 100 { |
| 101 TRACE_EVENT0("cc", "SoftwareRenderer::finishDrawingFrame"); |
99 m_currentFramebufferLock.reset(); | 102 m_currentFramebufferLock.reset(); |
100 m_skCurrentCanvas = 0; | 103 m_skCurrentCanvas = 0; |
101 m_skRootCanvas.reset(); | 104 m_skRootCanvas.reset(); |
102 m_outputDevice->unlock(); | 105 m_outputDevice->unlock(); |
103 } | 106 } |
104 | 107 |
105 bool SoftwareRenderer::flippedFramebuffer() const | 108 bool SoftwareRenderer::flippedFramebuffer() const |
106 { | 109 { |
107 return false; | 110 return false; |
108 } | 111 } |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
156 case ResourceProvider::Bitmap: | 159 case ResourceProvider::Bitmap: |
157 return true; | 160 return true; |
158 } | 161 } |
159 | 162 |
160 LOG(FATAL) << "Invalid resource type."; | 163 LOG(FATAL) << "Invalid resource type."; |
161 return false; | 164 return false; |
162 } | 165 } |
163 | 166 |
164 void SoftwareRenderer::drawQuad(DrawingFrame& frame, const DrawQuad* quad) | 167 void SoftwareRenderer::drawQuad(DrawingFrame& frame, const DrawQuad* quad) |
165 { | 168 { |
| 169 TRACE_EVENT0("cc", "SoftwareRenderer::drawQuad"); |
166 WebTransformationMatrix quadRectMatrix; | 170 WebTransformationMatrix quadRectMatrix; |
167 quadRectTransform(&quadRectMatrix, quad->quadTransform(), quad->quadRect()); | 171 quadRectTransform(&quadRectMatrix, quad->quadTransform(), quad->quadRect()); |
168 WebTransformationMatrix contentsDeviceTransform = (frame.windowMatrix * fram
e.projectionMatrix * quadRectMatrix).to2dTransform(); | 172 WebTransformationMatrix contentsDeviceTransform = (frame.windowMatrix * fram
e.projectionMatrix * quadRectMatrix).to2dTransform(); |
169 SkMatrix skDeviceMatrix; | 173 SkMatrix skDeviceMatrix; |
170 toSkMatrix(&skDeviceMatrix, contentsDeviceTransform); | 174 toSkMatrix(&skDeviceMatrix, contentsDeviceTransform); |
171 m_skCurrentCanvas->setMatrix(skDeviceMatrix); | 175 m_skCurrentCanvas->setMatrix(skDeviceMatrix); |
172 | 176 |
173 m_skCurrentPaint.reset(); | 177 m_skCurrentPaint.reset(); |
174 if (!isScaleAndTranslate(skDeviceMatrix)) { | 178 if (!isScaleAndTranslate(skDeviceMatrix)) { |
175 m_skCurrentPaint.setAntiAlias(true); | 179 m_skCurrentPaint.setAntiAlias(true); |
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
329 | 333 |
330 bool SoftwareRenderer::swapBuffers() | 334 bool SoftwareRenderer::swapBuffers() |
331 { | 335 { |
332 if (m_client->hasImplThread()) | 336 if (m_client->hasImplThread()) |
333 m_client->onSwapBuffersComplete(); | 337 m_client->onSwapBuffersComplete(); |
334 return true; | 338 return true; |
335 } | 339 } |
336 | 340 |
337 void SoftwareRenderer::getFramebufferPixels(void *pixels, const gfx::Rect& rect) | 341 void SoftwareRenderer::getFramebufferPixels(void *pixels, const gfx::Rect& rect) |
338 { | 342 { |
| 343 TRACE_EVENT0("cc", "SoftwareRenderer::getFramebufferPixels"); |
339 SkBitmap fullBitmap = m_outputDevice->lock(false)->getSkBitmap(); | 344 SkBitmap fullBitmap = m_outputDevice->lock(false)->getSkBitmap(); |
340 SkBitmap subsetBitmap; | 345 SkBitmap subsetBitmap; |
341 SkIRect invertRect = SkIRect::MakeXYWH(rect.x(), viewportSize().height() - r
ect.bottom(), rect.width(), rect.height()); | 346 SkIRect invertRect = SkIRect::MakeXYWH(rect.x(), viewportSize().height() - r
ect.bottom(), rect.width(), rect.height()); |
342 fullBitmap.extractSubset(&subsetBitmap, invertRect); | 347 fullBitmap.extractSubset(&subsetBitmap, invertRect); |
343 subsetBitmap.copyPixelsTo(pixels, rect.width() * rect.height() * 4, rect.wid
th() * 4); | 348 subsetBitmap.copyPixelsTo(pixels, rect.width() * rect.height() * 4, rect.wid
th() * 4); |
344 m_outputDevice->unlock(); | 349 m_outputDevice->unlock(); |
345 } | 350 } |
346 | 351 |
347 void SoftwareRenderer::setVisible(bool visible) | 352 void SoftwareRenderer::setVisible(bool visible) |
348 { | 353 { |
349 if (m_visible == visible) | 354 if (m_visible == visible) |
350 return; | 355 return; |
351 m_visible = visible; | 356 m_visible = visible; |
352 } | 357 } |
353 | 358 |
354 } // namespace cc | 359 } // namespace cc |
OLD | NEW |