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

Unified Diff: Source/core/platform/graphics/Canvas2DLayerManager.cpp

Issue 99103006: Moving GraphicsContext and dependencies from core to platform. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Final patch - fixes Android Created 7 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 side-by-side diff with in-line comments
Download patch
Index: Source/core/platform/graphics/Canvas2DLayerManager.cpp
diff --git a/Source/core/platform/graphics/Canvas2DLayerManager.cpp b/Source/core/platform/graphics/Canvas2DLayerManager.cpp
deleted file mode 100644
index d8af5fe2e5810dba4ceaf903c33c86f66c38f02b..0000000000000000000000000000000000000000
--- a/Source/core/platform/graphics/Canvas2DLayerManager.cpp
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
-Copyright (C) 2012 Google Inc. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
-EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
-DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-#include "config.h"
-
-#include "core/platform/graphics/Canvas2DLayerManager.h"
-
-#include "public/platform/Platform.h"
-#include "wtf/StdLibExtras.h"
-
-using blink::WebThread;
-
-namespace {
-enum {
- DefaultMaxBytesAllocated = 64*1024*1024,
- DefaultTargetBytesAllocated = 16*1024*1024,
-};
-}
-
-namespace WebCore {
-
-Canvas2DLayerManager::Canvas2DLayerManager()
- : m_bytesAllocated(0)
- , m_maxBytesAllocated(DefaultMaxBytesAllocated)
- , m_targetBytesAllocated(DefaultTargetBytesAllocated)
- , m_taskObserverActive(false)
-{
-}
-
-Canvas2DLayerManager::~Canvas2DLayerManager()
-{
- ASSERT(!m_bytesAllocated);
- ASSERT(!m_layerList.head());
- ASSERT(!m_taskObserverActive);
-}
-
-void Canvas2DLayerManager::init(size_t maxBytesAllocated, size_t targetBytesAllocated)
-{
- ASSERT(maxBytesAllocated >= targetBytesAllocated);
- m_maxBytesAllocated = maxBytesAllocated;
- m_targetBytesAllocated = targetBytesAllocated;
- if (m_taskObserverActive) {
- blink::Platform::current()->currentThread()->removeTaskObserver(this);
- m_taskObserverActive = false;
- }
-}
-
-Canvas2DLayerManager& Canvas2DLayerManager::get()
-{
- DEFINE_STATIC_LOCAL(Canvas2DLayerManager, manager, ());
- return manager;
-}
-
-void Canvas2DLayerManager::willProcessTask()
-{
-}
-
-void Canvas2DLayerManager::didProcessTask()
-{
- // Called after the script action for the current frame has been processed.
- ASSERT(m_taskObserverActive);
- blink::Platform::current()->currentThread()->removeTaskObserver(this);
- m_taskObserverActive = false;
- for (Canvas2DLayerBridge* layer = m_layerList.head(); layer; layer = layer->next())
- layer->limitPendingFrames();
-}
-
-void Canvas2DLayerManager::layerDidDraw(Canvas2DLayerBridge* layer)
-{
- if (isInList(layer)) {
- if (layer != m_layerList.head()) {
- m_layerList.remove(layer);
- m_layerList.push(layer); // Set as MRU
- }
- } else
- addLayerToList(layer);
-
- if (!m_taskObserverActive) {
- m_taskObserverActive = true;
- // Schedule a call to didProcessTask() after completion of the current script task.
- blink::Platform::current()->currentThread()->addTaskObserver(this);
- }
-}
-
-void Canvas2DLayerManager::addLayerToList(Canvas2DLayerBridge* layer)
-{
- ASSERT(!isInList(layer));
- m_bytesAllocated += layer->bytesAllocated();
- m_layerList.push(layer); // Set as MRU
-}
-
-void Canvas2DLayerManager::layerAllocatedStorageChanged(Canvas2DLayerBridge* layer, intptr_t deltaBytes)
-{
- if (!isInList(layer))
- addLayerToList(layer);
- else {
- ASSERT((intptr_t)m_bytesAllocated + deltaBytes >= 0);
- m_bytesAllocated = (intptr_t)m_bytesAllocated + deltaBytes;
- }
- if (deltaBytes > 0)
- freeMemoryIfNecessary();
-}
-
-void Canvas2DLayerManager::layerToBeDestroyed(Canvas2DLayerBridge* layer)
-{
- if (isInList(layer))
- removeLayerFromList(layer);
-}
-
-void Canvas2DLayerManager::freeMemoryIfNecessary()
-{
- if (m_bytesAllocated > m_maxBytesAllocated) {
- // Pass 1: Free memory from caches
- Canvas2DLayerBridge* layer = m_layerList.tail(); // LRU
- while (m_bytesAllocated > m_targetBytesAllocated && layer) {
- layer->freeMemoryIfPossible(m_bytesAllocated - m_targetBytesAllocated);
- layer = layer->prev();
- }
-
- // Pass 2: Flush canvases
- Canvas2DLayerBridge* leastRecentlyUsedLayer = m_layerList.tail();
- while (m_bytesAllocated > m_targetBytesAllocated && leastRecentlyUsedLayer) {
- leastRecentlyUsedLayer->flush();
- leastRecentlyUsedLayer->freeMemoryIfPossible(~0);
- removeLayerFromList(leastRecentlyUsedLayer);
- leastRecentlyUsedLayer = m_layerList.tail();
- }
- }
-}
-
-void Canvas2DLayerManager::removeLayerFromList(Canvas2DLayerBridge* layer)
-{
- ASSERT(isInList(layer));
- m_bytesAllocated -= layer->bytesAllocated();
- m_layerList.remove(layer);
- layer->setNext(0);
- layer->setPrev(0);
-}
-
-bool Canvas2DLayerManager::isInList(Canvas2DLayerBridge* layer)
-{
- return layer->prev() || m_layerList.head() == layer;
-}
-
-}
-
« no previous file with comments | « Source/core/platform/graphics/Canvas2DLayerManager.h ('k') | Source/core/platform/graphics/Canvas2DLayerManagerTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698