// Copyright 2011 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" #if USE(ACCELERATED_COMPOSITING) #include "BitmapSkPictureCanvasLayerTextureUpdater.h" #include "CCRenderingStats.h" #include "LayerPainterChromium.h" #include "PlatformColor.h" #include "SkCanvas.h" #include "SkDevice.h" #include namespace WebCore { BitmapSkPictureCanvasLayerTextureUpdater::Texture::Texture(BitmapSkPictureCanvasLayerTextureUpdater* textureUpdater, PassOwnPtr texture) : CanvasLayerTextureUpdater::Texture(texture) , m_textureUpdater(textureUpdater) { } void BitmapSkPictureCanvasLayerTextureUpdater::Texture::prepareRect(const IntRect& sourceRect, CCRenderingStats& stats) { m_bitmap.setConfig(SkBitmap::kARGB_8888_Config, sourceRect.width(), sourceRect.height()); m_bitmap.allocPixels(); m_bitmap.setIsOpaque(m_textureUpdater->layerIsOpaque()); SkDevice device(m_bitmap); SkCanvas canvas(&device); double paintBeginTime = monotonicallyIncreasingTime(); textureUpdater()->paintContentsRect(&canvas, sourceRect, stats); stats.totalPaintTimeInSeconds += monotonicallyIncreasingTime() - paintBeginTime; } void BitmapSkPictureCanvasLayerTextureUpdater::Texture::updateRect(CCResourceProvider* resourceProvider, const IntRect& sourceRect, const IntSize& destOffset) { m_bitmap.lockPixels(); texture()->upload(resourceProvider, static_cast(m_bitmap.getPixels()), sourceRect, sourceRect, destOffset); m_bitmap.unlockPixels(); m_bitmap.reset(); } PassRefPtr BitmapSkPictureCanvasLayerTextureUpdater::create(PassOwnPtr painter) { return adoptRef(new BitmapSkPictureCanvasLayerTextureUpdater(painter)); } BitmapSkPictureCanvasLayerTextureUpdater::BitmapSkPictureCanvasLayerTextureUpdater(PassOwnPtr painter) : SkPictureCanvasLayerTextureUpdater(painter) { } BitmapSkPictureCanvasLayerTextureUpdater::~BitmapSkPictureCanvasLayerTextureUpdater() { } PassOwnPtr BitmapSkPictureCanvasLayerTextureUpdater::createTexture(CCPrioritizedTextureManager* manager) { return adoptPtr(new Texture(this, CCPrioritizedTexture::create(manager))); } LayerTextureUpdater::SampledTexelFormat BitmapSkPictureCanvasLayerTextureUpdater::sampledTexelFormat(GC3Denum textureFormat) { // The component order may be bgra if we uploaded bgra pixels to rgba textures. return PlatformColor::sameComponentOrder(textureFormat) ? LayerTextureUpdater::SampledTexelFormatRGBA : LayerTextureUpdater::SampledTexelFormatBGRA; } void BitmapSkPictureCanvasLayerTextureUpdater::paintContentsRect(SkCanvas* canvas, const IntRect& sourceRect, CCRenderingStats& stats) { // Translate the origin of contentRect to that of sourceRect. canvas->translate(contentRect().x() - sourceRect.x(), contentRect().y() - sourceRect.y()); double rasterizeBeginTime = monotonicallyIncreasingTime(); drawPicture(canvas); stats.totalRasterizeTimeInSeconds += monotonicallyIncreasingTime() - rasterizeBeginTime; } } // namespace WebCore #endif // USE(ACCELERATED_COMPOSITING)