| 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;
|
| -}
|
| -
|
| -}
|
| -
|
|
|