提交 893e0200 编写于 作者: A Adam Barth

Canvas2DLayerManager shouldn't use a task observer

Previously, Canvas2DLayerManager was using addTaskObserver to jump the task
queue. After this CL, it goes to the end of the queue like a normal task.

R=ojan@chromium.org

Review URL: https://codereview.chromium.org/673783005
上级 94b71abc
...@@ -43,7 +43,7 @@ Canvas2DLayerManager::Canvas2DLayerManager() ...@@ -43,7 +43,7 @@ Canvas2DLayerManager::Canvas2DLayerManager()
: m_bytesAllocated(0) : m_bytesAllocated(0)
, m_maxBytesAllocated(DefaultMaxBytesAllocated) , m_maxBytesAllocated(DefaultMaxBytesAllocated)
, m_targetBytesAllocated(DefaultTargetBytesAllocated) , m_targetBytesAllocated(DefaultTargetBytesAllocated)
, m_taskObserverActive(false) , m_limitPendingFramesTimer(this, &Canvas2DLayerManager::limitPendingFramesTimerFired)
{ {
} }
...@@ -51,7 +51,6 @@ Canvas2DLayerManager::~Canvas2DLayerManager() ...@@ -51,7 +51,6 @@ Canvas2DLayerManager::~Canvas2DLayerManager()
{ {
ASSERT(!m_bytesAllocated); ASSERT(!m_bytesAllocated);
ASSERT(!m_layerList.head()); ASSERT(!m_layerList.head());
ASSERT(!m_taskObserverActive);
} }
void Canvas2DLayerManager::init(size_t maxBytesAllocated, size_t targetBytesAllocated) void Canvas2DLayerManager::init(size_t maxBytesAllocated, size_t targetBytesAllocated)
...@@ -59,10 +58,8 @@ void Canvas2DLayerManager::init(size_t maxBytesAllocated, size_t targetBytesAllo ...@@ -59,10 +58,8 @@ void Canvas2DLayerManager::init(size_t maxBytesAllocated, size_t targetBytesAllo
ASSERT(maxBytesAllocated >= targetBytesAllocated); ASSERT(maxBytesAllocated >= targetBytesAllocated);
m_maxBytesAllocated = maxBytesAllocated; m_maxBytesAllocated = maxBytesAllocated;
m_targetBytesAllocated = targetBytesAllocated; m_targetBytesAllocated = targetBytesAllocated;
if (m_taskObserverActive) { if (m_limitPendingFramesTimer.isActive())
Platform::current()->currentThread()->removeTaskObserver(this); m_limitPendingFramesTimer.stop();
m_taskObserverActive = false;
}
} }
Canvas2DLayerManager& Canvas2DLayerManager::get() Canvas2DLayerManager& Canvas2DLayerManager::get()
...@@ -71,16 +68,8 @@ Canvas2DLayerManager& Canvas2DLayerManager::get() ...@@ -71,16 +68,8 @@ Canvas2DLayerManager& Canvas2DLayerManager::get()
return manager; return manager;
} }
void Canvas2DLayerManager::willProcessTask() void Canvas2DLayerManager::limitPendingFramesTimerFired(Timer<Canvas2DLayerManager>*)
{ {
}
void Canvas2DLayerManager::didProcessTask()
{
// Called after the script action for the current frame has been processed.
ASSERT(m_taskObserverActive);
Platform::current()->currentThread()->removeTaskObserver(this);
m_taskObserverActive = false;
Canvas2DLayerBridge* layer = m_layerList.head(); Canvas2DLayerBridge* layer = m_layerList.head();
while (layer) { while (layer) {
Canvas2DLayerBridge* currentLayer = layer; Canvas2DLayerBridge* currentLayer = layer;
...@@ -100,11 +89,8 @@ void Canvas2DLayerManager::layerDidDraw(Canvas2DLayerBridge* layer) ...@@ -100,11 +89,8 @@ void Canvas2DLayerManager::layerDidDraw(Canvas2DLayerBridge* layer)
} }
} }
if (!m_taskObserverActive) { if (!m_limitPendingFramesTimer.isActive())
m_taskObserverActive = true; m_limitPendingFramesTimer.startOneShot(0, FROM_HERE);
// Schedule a call to didProcessTask() after completion of the current script task.
Platform::current()->currentThread()->addTaskObserver(this);
}
} }
void Canvas2DLayerManager::layerTransientResourceAllocationChanged(Canvas2DLayerBridge* layer, intptr_t deltaBytes) void Canvas2DLayerManager::layerTransientResourceAllocationChanged(Canvas2DLayerBridge* layer, intptr_t deltaBytes)
......
...@@ -25,14 +25,14 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ...@@ -25,14 +25,14 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#ifndef Canvas2DLayerManager_h #ifndef Canvas2DLayerManager_h
#define Canvas2DLayerManager_h #define Canvas2DLayerManager_h
#include "platform/Timer.h"
#include "platform/graphics/Canvas2DLayerBridge.h" #include "platform/graphics/Canvas2DLayerBridge.h"
#include "public/platform/WebThread.h"
class Canvas2DLayerManagerTest; class Canvas2DLayerManagerTest;
namespace blink { namespace blink {
class PLATFORM_EXPORT Canvas2DLayerManager : public WebThread::TaskObserver { class PLATFORM_EXPORT Canvas2DLayerManager {
public: public:
static Canvas2DLayerManager& get(); static Canvas2DLayerManager& get();
...@@ -49,13 +49,13 @@ private: ...@@ -49,13 +49,13 @@ private:
// internal methods // internal methods
void freeMemoryIfNecessary(); void freeMemoryIfNecessary();
void addLayerToList(Canvas2DLayerBridge*); void addLayerToList(Canvas2DLayerBridge*);
virtual void willProcessTask() OVERRIDE;
virtual void didProcessTask() OVERRIDE; void limitPendingFramesTimerFired(Timer<Canvas2DLayerManager>*);
size_t m_bytesAllocated; size_t m_bytesAllocated;
size_t m_maxBytesAllocated; size_t m_maxBytesAllocated;
size_t m_targetBytesAllocated; size_t m_targetBytesAllocated;
bool m_taskObserverActive; Timer<Canvas2DLayerManager> m_limitPendingFramesTimer;
DoublyLinkedList<Canvas2DLayerBridge> m_layerList; DoublyLinkedList<Canvas2DLayerBridge> m_layerList;
friend class ::Canvas2DLayerManagerTest; // for unit testing friend class ::Canvas2DLayerManagerTest; // for unit testing
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册