summaryrefslogtreecommitdiffstats
path: root/WebCore
diff options
context:
space:
mode:
authorNicolas Roard <nicolas@android.com>2010-12-13 17:13:51 -0800
committerAndroid (Google) Code Review <android-gerrit@google.com>2010-12-13 17:13:51 -0800
commitbc17e1187b949cb1348c5d375bb4361795d47eae (patch)
tree13f0d54db70d64e8d75210ac45a1ce828b803944 /WebCore
parent9cb2c64b0e05541c6e78a17de554436f933351fb (diff)
parentee5f2ff1ad8be350308b229a10fe53c8d5709be2 (diff)
downloadexternal_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.h21
-rw-r--r--WebCore/platform/graphics/android/TexturesGenerator.cpp28
-rw-r--r--WebCore/platform/graphics/android/TexturesGenerator.h6
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