diff options
author | Nicolas Roard <nicolas@android.com> | 2010-12-13 17:13:51 -0800 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2010-12-13 17:13:51 -0800 |
commit | bc17e1187b949cb1348c5d375bb4361795d47eae (patch) | |
tree | 13f0d54db70d64e8d75210ac45a1ce828b803944 /WebCore | |
parent | 9cb2c64b0e05541c6e78a17de554436f933351fb (diff) | |
parent | ee5f2ff1ad8be350308b229a10fe53c8d5709be2 (diff) | |
download | external_webkit-bc17e1187b949cb1348c5d375bb4361795d47eae.zip external_webkit-bc17e1187b949cb1348c5d375bb4361795d47eae.tar.gz external_webkit-bc17e1187b949cb1348c5d375bb4361795d47eae.tar.bz2 |
Merge "Refactoring TexturesGenerator filtering"
Diffstat (limited to 'WebCore')
-rw-r--r-- | WebCore/platform/graphics/android/QueuedOperation.h | 21 | ||||
-rw-r--r-- | WebCore/platform/graphics/android/TexturesGenerator.cpp | 28 | ||||
-rw-r--r-- | WebCore/platform/graphics/android/TexturesGenerator.h | 6 |
3 files changed, 43 insertions, 12 deletions
diff --git a/WebCore/platform/graphics/android/QueuedOperation.h b/WebCore/platform/graphics/android/QueuedOperation.h index 3e2b048..7472db7 100644 --- a/WebCore/platform/graphics/android/QueuedOperation.h +++ b/WebCore/platform/graphics/android/QueuedOperation.h @@ -46,6 +46,27 @@ class QueuedOperation { TiledPage* m_page; }; +class OperationFilter +{ + public: + virtual ~OperationFilter() {} + virtual bool check(QueuedOperation* operation) = 0; +}; + +class PageFilter : public OperationFilter +{ + public: + PageFilter(TiledPage* page) : m_page(page) {} + virtual bool check(QueuedOperation* operation) + { + if (operation->page() == m_page) + return true; + return false; + } + private: + TiledPage* m_page; +}; + } #endif // QueuedOperation_h diff --git a/WebCore/platform/graphics/android/TexturesGenerator.cpp b/WebCore/platform/graphics/android/TexturesGenerator.cpp index 26090b0..234c7f9 100644 --- a/WebCore/platform/graphics/android/TexturesGenerator.cpp +++ b/WebCore/platform/graphics/android/TexturesGenerator.cpp @@ -73,22 +73,30 @@ void TexturesGenerator::scheduleOperation(QueuedOperation* operation) void TexturesGenerator::removeOperationsForPage(TiledPage* page) { + removeOperationsForFilter(new PageFilter(page)); +} + +void TexturesGenerator::removeOperationsForFilter(OperationFilter* filter) +{ mRequestedOperationsLock.lock(); - typedef Vector<QueuedOperation*>::const_iterator iterator; - iterator end = mRequestedOperations.end(); - for (iterator it = mRequestedOperations.begin(); it != end; ++it) { - QueuedOperation* operation = static_cast<QueuedOperation*>(*it); - if (operation->page() == page) - delete *it; + for (unsigned int i = 0; i < mRequestedOperations.size();) { + QueuedOperation* operation = mRequestedOperations[i]; + if (filter->check(operation)) { + mRequestedOperations.remove(i); + delete operation; + } else { + i++; + } } + QueuedOperation* operation = m_currentOperation; - if (operation && operation->page() != page) - operation = 0; - if (operation) + if (operation && filter->check(operation)) m_waitForCompletion = true; + mRequestedOperationsLock.unlock(); + delete filter; - if (!operation) + if (!m_waitForCompletion) return; // At this point, it means that we are currently painting a operation that diff --git a/WebCore/platform/graphics/android/TexturesGenerator.h b/WebCore/platform/graphics/android/TexturesGenerator.h index ae02d14..84dbeab 100644 --- a/WebCore/platform/graphics/android/TexturesGenerator.h +++ b/WebCore/platform/graphics/android/TexturesGenerator.h @@ -40,11 +40,13 @@ using namespace android; class TexturesGenerator : public Thread { public: TexturesGenerator() : Thread() - , m_waitForCompletion(false) { } + , m_waitForCompletion(false) + , m_currentOperation(0) { } virtual ~TexturesGenerator() { } virtual status_t readyToRun(); void removeOperationsForPage(TiledPage* page); + void removeOperationsForFilter(OperationFilter* filter); void scheduleOperation(QueuedOperation* operation); @@ -55,8 +57,8 @@ private: android::Condition mRequestedOperationsCond; android::Mutex m_newRequestLock; android::Condition m_newRequestCond; - QueuedOperation* m_currentOperation; bool m_waitForCompletion; + QueuedOperation* m_currentOperation; }; } // namespace WebCore |