Index: cc/CCHeadsUpDisplayLayerImpl.cpp |
diff --git a/cc/CCHeadsUpDisplayLayerImpl.cpp b/cc/CCHeadsUpDisplayLayerImpl.cpp |
deleted file mode 100644 |
index 58a490ef742889811797e996c165f26afed6978d..0000000000000000000000000000000000000000 |
--- a/cc/CCHeadsUpDisplayLayerImpl.cpp |
+++ /dev/null |
@@ -1,296 +0,0 @@ |
-// Copyright 2012 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 "config.h" |
- |
-#include "CCHeadsUpDisplayLayerImpl.h" |
- |
-#include "base/stringprintf.h" |
-#include "ui/gfx/point.h" |
-#include "CCDebugRectHistory.h" |
-#include "CCFontAtlas.h" |
-#include "CCFrameRateCounter.h" |
-#include "CCLayerTreeHostImpl.h" |
-#include "CCQuadSink.h" |
-#include "CCTextureDrawQuad.h" |
-#include "Extensions3DChromium.h" |
-#include "GraphicsContext3D.h" |
-#include "SkBitmap.h" |
-#include "SkColorMatrixFilter.h" |
-#include "SkPaint.h" |
-#include "skia/ext/platform_canvas.h" |
- |
-namespace cc { |
- |
-static inline SkPaint createPaint() |
-{ |
- // The SkCanvas is in RGBA but the shader is expecting BGRA, so we need to |
- // swizzle our colors when drawing to the SkCanvas. |
- SkColorMatrix swizzleMatrix; |
- for (int i = 0; i < 20; ++i) |
- swizzleMatrix.fMat[i] = 0; |
- swizzleMatrix.fMat[0 + 5 * 2] = 1; |
- swizzleMatrix.fMat[1 + 5 * 1] = 1; |
- swizzleMatrix.fMat[2 + 5 * 0] = 1; |
- swizzleMatrix.fMat[3 + 5 * 3] = 1; |
- |
- SkPaint paint; |
- paint.setColorFilter(new SkColorMatrixFilter(swizzleMatrix))->unref(); |
- return paint; |
-} |
- |
-CCHeadsUpDisplayLayerImpl::CCHeadsUpDisplayLayerImpl(int id) |
- : CCLayerImpl(id) |
-{ |
-} |
- |
-CCHeadsUpDisplayLayerImpl::~CCHeadsUpDisplayLayerImpl() |
-{ |
-} |
- |
-void CCHeadsUpDisplayLayerImpl::setFontAtlas(scoped_ptr<CCFontAtlas> fontAtlas) |
-{ |
- m_fontAtlas = fontAtlas.Pass(); |
-} |
- |
-void CCHeadsUpDisplayLayerImpl::willDraw(CCResourceProvider* resourceProvider) |
-{ |
- CCLayerImpl::willDraw(resourceProvider); |
- |
- if (!m_hudTexture) |
- m_hudTexture = CCScopedTexture::create(resourceProvider); |
- |
- // FIXME: Scale the HUD by deviceScale to make it more friendly under high DPI. |
- |
- if (m_hudTexture->size() != bounds()) |
- m_hudTexture->free(); |
- |
- if (!m_hudTexture->id()) |
- m_hudTexture->allocate(CCRenderer::ImplPool, bounds(), GraphicsContext3D::RGBA, CCResourceProvider::TextureUsageAny); |
-} |
- |
-void CCHeadsUpDisplayLayerImpl::appendQuads(CCQuadSink& quadSink, CCAppendQuadsData& appendQuadsData) |
-{ |
- if (!m_hudTexture->id()) |
- return; |
- |
- CCSharedQuadState* sharedQuadState = quadSink.useSharedQuadState(createSharedQuadState()); |
- |
- IntRect quadRect(IntPoint(), bounds()); |
- bool premultipliedAlpha = true; |
- FloatRect uvRect(0, 0, 1, 1); |
- bool flipped = false; |
- quadSink.append(CCTextureDrawQuad::create(sharedQuadState, quadRect, m_hudTexture->id(), premultipliedAlpha, uvRect, flipped).PassAs<CCDrawQuad>(), appendQuadsData); |
-} |
- |
-void CCHeadsUpDisplayLayerImpl::updateHudTexture(CCResourceProvider* resourceProvider) |
-{ |
- if (!m_hudTexture->id()) |
- return; |
- |
- SkISize canvasSize; |
- if (m_hudCanvas) |
- canvasSize = m_hudCanvas->getDeviceSize(); |
- else |
- canvasSize.set(0, 0); |
- |
- if (canvasSize.fWidth != bounds().width() || canvasSize.fHeight != bounds().height() || !m_hudCanvas) |
- m_hudCanvas = adoptPtr(skia::CreateBitmapCanvas(bounds().width(), bounds().height(), false /* opaque */)); |
- |
- m_hudCanvas->clear(SkColorSetARGB(0, 0, 0, 0)); |
- drawHudContents(m_hudCanvas.get()); |
- |
- const SkBitmap* bitmap = &m_hudCanvas->getDevice()->accessBitmap(false); |
- SkAutoLockPixels locker(*bitmap); |
- |
- IntRect layerRect(IntPoint(), bounds()); |
- ASSERT(bitmap->config() == SkBitmap::kARGB_8888_Config); |
- resourceProvider->upload(m_hudTexture->id(), static_cast<const uint8_t*>(bitmap->getPixels()), layerRect, layerRect, IntSize()); |
-} |
- |
-void CCHeadsUpDisplayLayerImpl::didDraw(CCResourceProvider* resourceProvider) |
-{ |
- CCLayerImpl::didDraw(resourceProvider); |
- |
- if (!m_hudTexture->id()) |
- return; |
- |
- // FIXME: the following assert will not be true when sending resources to a |
- // parent compositor. We will probably need to hold on to m_hudTexture for |
- // longer, and have several HUD textures in the pipeline. |
- ASSERT(!resourceProvider->inUseByConsumer(m_hudTexture->id())); |
-} |
- |
-void CCHeadsUpDisplayLayerImpl::didLoseContext() |
-{ |
- m_hudTexture.clear(); |
-} |
- |
-bool CCHeadsUpDisplayLayerImpl::layerIsAlwaysDamaged() const |
-{ |
- return true; |
-} |
- |
-void CCHeadsUpDisplayLayerImpl::drawHudContents(SkCanvas* canvas) |
-{ |
- const CCLayerTreeSettings& settings = layerTreeHostImpl()->settings(); |
- |
- if (settings.showPlatformLayerTree) { |
- SkPaint paint = createPaint(); |
- paint.setColor(SkColorSetARGB(192, 0, 0, 0)); |
- canvas->drawRect(SkRect::MakeXYWH(0, 0, bounds().width(), bounds().height()), paint); |
- } |
- |
- int fpsCounterHeight = 40; |
- int fpsCounterTop = 2; |
- int platformLayerTreeTop; |
- |
- if (settings.showFPSCounter) |
- platformLayerTreeTop = fpsCounterTop + fpsCounterHeight; |
- else |
- platformLayerTreeTop = 0; |
- |
- if (settings.showFPSCounter) |
- drawFPSCounter(canvas, layerTreeHostImpl()->fpsCounter(), fpsCounterTop, fpsCounterHeight); |
- |
- if (settings.showPlatformLayerTree && m_fontAtlas.get()) { |
- std::string layerTree = layerTreeHostImpl()->layerTreeAsText(); |
- m_fontAtlas->drawText(canvas, createPaint(), layerTree, gfx::Point(2, platformLayerTreeTop), bounds()); |
- } |
- |
- if (settings.showDebugRects()) |
- drawDebugRects(canvas, layerTreeHostImpl()->debugRectHistory()); |
-} |
- |
-void CCHeadsUpDisplayLayerImpl::drawFPSCounter(SkCanvas* canvas, CCFrameRateCounter* fpsCounter, int top, int height) |
-{ |
- float textWidth = 170; // so text fits on linux. |
- float graphWidth = fpsCounter->timeStampHistorySize(); |
- |
- // Draw the FPS text. |
- drawFPSCounterText(canvas, fpsCounter, top, textWidth, height); |
- |
- // Draw FPS graph. |
- const double loFPS = 0; |
- const double hiFPS = 80; |
- SkPaint paint = createPaint(); |
- paint.setColor(SkColorSetRGB(154, 205, 50)); |
- canvas->drawRect(SkRect::MakeXYWH(2 + textWidth, top, graphWidth, height / 2), paint); |
- |
- paint.setColor(SkColorSetRGB(255, 250, 205)); |
- canvas->drawRect(SkRect::MakeXYWH(2 + textWidth, top + height / 2, graphWidth, height / 2), paint); |
- |
- int graphLeft = static_cast<int>(textWidth + 3); |
- int x = 0; |
- double h = static_cast<double>(height - 2); |
- SkPath path; |
- for (int i = 0; i < fpsCounter->timeStampHistorySize() - 1; ++i) { |
- int j = i + 1; |
- double delta = fpsCounter->timeStampOfRecentFrame(j) - fpsCounter->timeStampOfRecentFrame(i); |
- |
- // Skip plotting this particular instantaneous frame rate if it is not likely to have been valid. |
- if (fpsCounter->isBadFrameInterval(delta)) { |
- x += 1; |
- continue; |
- } |
- |
- double fps = 1.0 / delta; |
- |
- // Clamp the FPS to the range we want to plot visually. |
- double p = 1 - ((fps - loFPS) / (hiFPS - loFPS)); |
- if (p < 0) |
- p = 0; |
- if (p > 1) |
- p = 1; |
- |
- // Plot this data point. |
- SkPoint cur = SkPoint::Make(graphLeft + x, 1 + top + p*h); |
- if (path.isEmpty()) |
- path.moveTo(cur); |
- else |
- path.lineTo(cur); |
- x += 1; |
- } |
- paint.setColor(SK_ColorRED); |
- paint.setStyle(SkPaint::kStroke_Style); |
- paint.setStrokeWidth(1); |
- paint.setAntiAlias(true); |
- canvas->drawPath(path, paint); |
-} |
- |
-void CCHeadsUpDisplayLayerImpl::drawFPSCounterText(SkCanvas* canvas, CCFrameRateCounter* fpsCounter, int top, int width, int height) |
-{ |
- double averageFPS, stdDeviation; |
- fpsCounter->getAverageFPSAndStandardDeviation(averageFPS, stdDeviation); |
- |
- // Draw background. |
- SkPaint paint = createPaint(); |
- paint.setColor(SK_ColorBLACK); |
- canvas->drawRect(SkRect::MakeXYWH(2, top, width, height), paint); |
- |
- // Draw FPS text. |
- if (m_fontAtlas.get()) |
- m_fontAtlas->drawText(canvas, createPaint(), base::StringPrintf("FPS: %4.1f +/- %3.1f", averageFPS, stdDeviation), gfx::Point(10, height / 3), IntSize(width, height)); |
-} |
- |
-void CCHeadsUpDisplayLayerImpl::drawDebugRects(SkCanvas* canvas, CCDebugRectHistory* debugRectHistory) |
-{ |
- const Vector<CCDebugRect>& debugRects = debugRectHistory->debugRects(); |
- |
- for (size_t i = 0; i < debugRects.size(); ++i) { |
- SkColor strokeColor = 0; |
- SkColor fillColor = 0; |
- |
- switch (debugRects[i].type) { |
- case PaintRectType: |
- // Paint rects in red |
- strokeColor = SkColorSetARGB(255, 255, 0, 0); |
- fillColor = SkColorSetARGB(30, 255, 0, 0); |
- break; |
- case PropertyChangedRectType: |
- // Property-changed rects in blue |
- strokeColor = SkColorSetARGB(255, 255, 0, 0); |
- fillColor = SkColorSetARGB(30, 0, 0, 255); |
- break; |
- case SurfaceDamageRectType: |
- // Surface damage rects in yellow-orange |
- strokeColor = SkColorSetARGB(255, 200, 100, 0); |
- fillColor = SkColorSetARGB(30, 200, 100, 0); |
- break; |
- case ReplicaScreenSpaceRectType: |
- // Screen space rects in green. |
- strokeColor = SkColorSetARGB(255, 100, 200, 0); |
- fillColor = SkColorSetARGB(30, 100, 200, 0); |
- break; |
- case ScreenSpaceRectType: |
- // Screen space rects in purple. |
- strokeColor = SkColorSetARGB(255, 100, 0, 200); |
- fillColor = SkColorSetARGB(10, 100, 0, 200); |
- break; |
- case OccludingRectType: |
- // Occluding rects in a reddish color. |
- strokeColor = SkColorSetARGB(255, 200, 0, 100); |
- fillColor = SkColorSetARGB(10, 200, 0, 100); |
- break; |
- } |
- |
- const FloatRect& rect = debugRects[i].rect; |
- SkRect skRect = SkRect::MakeXYWH(rect.x(), rect.y(), rect.width(), rect.height()); |
- SkPaint paint = createPaint(); |
- paint.setColor(fillColor); |
- canvas->drawRect(skRect, paint); |
- |
- paint.setColor(strokeColor); |
- paint.setStyle(SkPaint::kStroke_Style); |
- paint.setStrokeWidth(2); |
- canvas->drawRect(skRect, paint); |
- } |
-} |
- |
-const char* CCHeadsUpDisplayLayerImpl::layerTypeAsString() const |
-{ |
- return "HeadsUpDisplayLayer"; |
-} |
- |
-} |