[SCM] WebKit Debian packaging branch, debian/experimental, updated. upstream/1.3.3-9427-gc2be6fc
kinuko at chromium.org
kinuko at chromium.org
Wed Dec 22 11:37:20 UTC 2010
The following commit has been merged in the debian/experimental branch:
commit 94991d70b5e215656cf41ed083aac9313f4f4d17
Author: kinuko at chromium.org <kinuko at chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date: Sat Jul 31 05:04:11 2010 +0000
2010-07-30 Kinuko Yasuda <kinuko at chromium.org>
Reviewed by Jian Li.
Decouple FileThread from FileStream to support generic file-related async tasks
https://bugs.webkit.org/show_bug.cgi?id=43135
No new tests as this doesn't change any functionality.
* html/FileThread.cpp:
(WebCore::FileThread::stop):
(WebCore::SameInstancePredicate::SameFilePredicate):
(WebCore::SameInstancePredicate::operator()):
(WebCore::FileThread::unscheduleTasksInternal):
* html/FileThread.h:
(WebCore::FileThread::create):
(WebCore::FileThread::Task::instance):
(WebCore::FileThread::Task::Task):
* html/FileThreadTask.h: Changed all templates to take any type as a callee instance.
(WebCore::createFileThreadTask):
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@64406 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index 84d0e34..cf2aa36 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,24 @@
+2010-07-30 Kinuko Yasuda <kinuko at chromium.org>
+
+ Reviewed by Jian Li.
+
+ Decouple FileThread from FileStream to support generic file-related async tasks
+ https://bugs.webkit.org/show_bug.cgi?id=43135
+
+ No new tests as this doesn't change any functionality.
+
+ * html/FileThread.cpp:
+ (WebCore::FileThread::stop):
+ (WebCore::SameInstancePredicate::SameFilePredicate):
+ (WebCore::SameInstancePredicate::operator()):
+ (WebCore::FileThread::unscheduleTasksInternal):
+ * html/FileThread.h:
+ (WebCore::FileThread::create):
+ (WebCore::FileThread::Task::instance):
+ (WebCore::FileThread::Task::Task):
+ * html/FileThreadTask.h: Changed all templates to take any type as a callee instance.
+ (WebCore::createFileThreadTask):
+
2010-07-30 Darin Fisher <darin at chromium.org>
Reviewed by Darin Adler.
diff --git a/WebCore/html/FileThread.cpp b/WebCore/html/FileThread.cpp
index 02b1718..3a3413c 100644
--- a/WebCore/html/FileThread.cpp
+++ b/WebCore/html/FileThread.cpp
@@ -61,7 +61,7 @@ bool FileThread::start()
void FileThread::stop()
{
- return m_queue.kill();
+ m_queue.kill();
}
void FileThread::postTask(PassOwnPtr<Task> task)
@@ -69,17 +69,17 @@ void FileThread::postTask(PassOwnPtr<Task> task)
m_queue.append(task);
}
-class SameFilePredicate {
+class SameInstancePredicate {
public:
- SameFilePredicate(const FileStream* stream) : m_stream(stream) { }
- bool operator()(FileThread::Task* task) const { return task->stream() == m_stream; }
+ SameInstancePredicate(const void* instance) : m_instance(instance) { }
+ bool operator()(FileThread::Task* task) const { return task->instance() == m_instance; }
private:
- const FileStream* m_stream;
+ const void* m_instance;
};
-void FileThread::unscheduleTasks(const FileStream* stream)
+void FileThread::unscheduleTasks(const void* instance)
{
- SameFilePredicate predicate(stream);
+ SameInstancePredicate predicate(instance);
m_queue.removeIf(predicate);
}
diff --git a/WebCore/html/FileThread.h b/WebCore/html/FileThread.h
index d27273a..2eba98e 100644
--- a/WebCore/html/FileThread.h
+++ b/WebCore/html/FileThread.h
@@ -44,7 +44,11 @@ class FileStream;
class FileThread : public ThreadSafeShared<FileThread> {
public:
- static PassRefPtr<FileThread> create() { return adoptRef(new FileThread()); }
+ static PassRefPtr<FileThread> create()
+ {
+ return adoptRef(new FileThread());
+ }
+
~FileThread();
bool start();
@@ -54,14 +58,15 @@ public:
public:
virtual ~Task() { }
virtual void performTask() = 0;
- FileStream* stream() const { return m_stream; }
+ void* instance() const { return m_instance; }
protected:
- Task(FileStream* stream) : m_stream(stream) { }
- FileStream* m_stream;
+ Task(void* instance) : m_instance(instance) { }
+ void* m_instance;
};
void postTask(PassOwnPtr<Task> task);
- void unscheduleTasks(const FileStream*);
+
+ void unscheduleTasks(const void* instance);
private:
FileThread();
diff --git a/WebCore/html/FileThreadTask.h b/WebCore/html/FileThreadTask.h
index de11798..09b647f 100644
--- a/WebCore/html/FileThreadTask.h
+++ b/WebCore/html/FileThreadTask.h
@@ -32,73 +32,55 @@
#define FileThreadTask_h
#include "CrossThreadCopier.h"
+#include "CrossThreadTask.h"
#include "FileThread.h"
-#include <memory>
#include <wtf/PassOwnPtr.h>
#include <wtf/PassRefPtr.h>
-#include <wtf/TypeTraits.h>
namespace WebCore {
-// Traits for the Task.
-template<typename T> struct FileThreadTaskTraits {
- typedef const T& ParamType;
-};
-
-template<typename T> struct FileThreadTaskTraits<T*> {
- typedef T* ParamType;
-};
-
-template<typename T> struct FileThreadTaskTraits<PassRefPtr<T> > {
- typedef PassRefPtr<T> ParamType;
-};
-
-template<typename T> struct FileThreadTaskTraits<PassOwnPtr<T> > {
- typedef PassOwnPtr<T> ParamType;
-};
-
-template<typename R>
+template<typename R, typename T>
class FileThreadTask0 : public FileThread::Task {
public:
- typedef R (FileStream::*Method)();
- typedef FileThreadTask0<R> FileThreadTask;
+ typedef R (T::*Method)();
+ typedef FileThreadTask0<R, T> FileThreadTaskImpl;
- static PassOwnPtr<FileThreadTask> create(FileStream* stream, Method method)
+ static PassOwnPtr<FileThreadTaskImpl> create(T* instance, Method method)
{
- return new FileThreadTask(stream, method);
+ return new FileThreadTaskImpl(instance, method);
}
private:
- FileThreadTask0(FileStream* stream, Method method)
- : FileThread::Task(stream)
+ FileThreadTask0(T* instance, Method method)
+ : FileThread::Task(instance)
, m_method(method)
{
}
virtual void performTask()
{
- (*stream().*m_method)();
+ (*static_cast<T*>(instance()).*m_method)();
}
private:
Method m_method;
};
-template<typename R, typename P1, typename MP1>
+template<typename R, typename T, typename P1, typename MP1>
class FileThreadTask1 : public FileThread::Task {
public:
- typedef R (FileStream::*Method)(MP1);
- typedef FileThreadTask1<R, P1, MP1> FileThreadTask;
- typedef typename FileThreadTaskTraits<P1>::ParamType Param1;
+ typedef R (T::*Method)(MP1);
+ typedef FileThreadTask1<R, T, P1, MP1> FileThreadTaskImpl;
+ typedef typename CrossThreadTaskTraits<P1>::ParamType Param1;
- static PassOwnPtr<FileThreadTask> create(FileStream* stream, Method method, Param1 parameter1)
+ static PassOwnPtr<FileThreadTaskImpl> create(T* instance, Method method, Param1 parameter1)
{
- return new FileThreadTask(stream, method, parameter1);
+ return new FileThreadTaskImpl(instance, method, parameter1);
}
private:
- FileThreadTask1(FileStream* stream, Method method, Param1 parameter1)
- : FileThread::Task(stream)
+ FileThreadTask1(T* instance, Method method, Param1 parameter1)
+ : FileThread::Task(instance)
, m_method(method)
, m_parameter1(parameter1)
{
@@ -106,7 +88,7 @@ private:
virtual void performTask()
{
- (*stream().*m_method)(m_parameter1);
+ (*static_cast<T*>(instance()).*m_method)(m_parameter1);
}
private:
@@ -114,22 +96,22 @@ private:
P1 m_parameter1;
};
-template<typename R, typename P1, typename MP1, typename P2, typename MP2>
+template<typename R, typename T, typename P1, typename MP1, typename P2, typename MP2>
class FileThreadTask2 : public FileThread::Task {
public:
- typedef R (FileStream::*Method)(MP1, MP2);
- typedef FileThreadTask2<R, P1, MP1, P2, MP2> FileThreadTask;
- typedef typename FileThreadTaskTraits<P1>::ParamType Param1;
- typedef typename FileThreadTaskTraits<P2>::ParamType Param2;
+ typedef R (T::*Method)(MP1, MP2);
+ typedef FileThreadTask2<R, T, P1, MP1, P2, MP2> FileThreadTaskImpl;
+ typedef typename CrossThreadTaskTraits<P1>::ParamType Param1;
+ typedef typename CrossThreadTaskTraits<P2>::ParamType Param2;
- static PassOwnPtr<FileThreadTask> create(FileStream* stream, Method method, Param1 parameter1, Param2 parameter2)
+ static PassOwnPtr<FileThreadTaskImpl> create(T* instance, Method method, Param1 parameter1, Param2 parameter2)
{
- return new FileThreadTask(stream, method, parameter1, parameter2);
+ return new FileThreadTaskImpl(instance, method, parameter1, parameter2);
}
private:
- FileThreadTask2(FileStream* stream, Method method, Param1 parameter1, Param2 parameter2)
- : FileThread::Task(stream)
+ FileThreadTask2(T* instance, Method method, Param1 parameter1, Param2 parameter2)
+ : FileThread::Task(instance)
, m_method(method)
, m_parameter1(parameter1)
, m_parameter2(parameter2)
@@ -138,7 +120,7 @@ private:
virtual void performTask()
{
- (*stream().*m_method)(m_parameter1, m_parameter2);
+ (*static_cast<T*>(instance()).*m_method)(m_parameter1, m_parameter2);
}
private:
@@ -147,23 +129,23 @@ private:
P2 m_parameter2;
};
-template<typename R, typename P1, typename MP1, typename P2, typename MP2, typename P3, typename MP3>
+template<typename R, typename T, typename P1, typename MP1, typename P2, typename MP2, typename P3, typename MP3>
class FileThreadTask3 : public FileThread::Task {
public:
- typedef R (FileStream::*Method)(MP1, MP2, MP3);
- typedef FileThreadTask3<R, P1, MP1, P2, MP2, P3, MP3> FileThreadTask;
- typedef typename FileThreadTaskTraits<P1>::ParamType Param1;
- typedef typename FileThreadTaskTraits<P2>::ParamType Param2;
- typedef typename FileThreadTaskTraits<P3>::ParamType Param3;
+ typedef void (T::*Method)(MP1, MP2, MP3);
+ typedef FileThreadTask3<R, T, P1, MP1, P2, MP2, P3, MP3> FileThreadTaskImpl;
+ typedef typename CrossThreadTaskTraits<P1>::ParamType Param1;
+ typedef typename CrossThreadTaskTraits<P2>::ParamType Param2;
+ typedef typename CrossThreadTaskTraits<P3>::ParamType Param3;
- static PassOwnPtr<FileThreadTask> create(FileStream* stream, Method method, Param1 parameter1, Param2 parameter2, Param3 parameter3)
+ static PassOwnPtr<FileThreadTaskImpl> create(T* instance, Method method, Param1 parameter1, Param2 parameter2, Param3 parameter3)
{
- return new FileThreadTask(stream, method, parameter1, parameter2, parameter3);
+ return new FileThreadTaskImpl(instance, method, parameter1, parameter2, parameter3);
}
private:
- FileThreadTask3(FileStream* stream, Method method, Param1 parameter1, Param2 parameter2, Param3 parameter3)
- : FileThread::Task(stream)
+ FileThreadTask3(T* instance, Method method, Param1 parameter1, Param2 parameter2, Param3 parameter3)
+ : FileThread::Task(instance)
, m_method(method)
, m_parameter1(parameter1)
, m_parameter2(parameter2)
@@ -173,7 +155,7 @@ private:
virtual void performTask()
{
- (*stream().*m_method)(m_parameter1, m_parameter2, m_parameter3);
+ (*static_cast<T*>(instance()).*m_method)(m_parameter1, m_parameter2, m_parameter3);
}
private:
@@ -183,56 +165,56 @@ private:
P3 m_parameter3;
};
-template<typename R>
+template<typename R, typename T>
PassOwnPtr<FileThread::Task> createFileThreadTask(
- FileStream* const callee,
- R (FileStream::*method)());
+ T* const callee,
+ R (T::*method)());
-template<typename R>
+template<typename R, typename T>
PassOwnPtr<FileThread::Task> createFileThreadTask(
- FileStream* const callee,
- R (FileStream::*method)())
+ T* const callee,
+ R (T::*method)())
{
- return FileThreadTask0<R>::create(
+ return FileThreadTask0<R, T>::create(
callee,
method);
}
-template<typename R, typename P1, typename MP1>
+template<typename R, typename T, typename P1, typename MP1>
PassOwnPtr<FileThread::Task> createFileThreadTask(
- FileStream* const callee,
- R (FileStream::*method)(MP1),
+ T* const callee,
+ R (T::*method)(MP1),
const P1& parameter1)
{
- return FileThreadTask1<R, typename CrossThreadCopier<P1>::Type, MP1>::create(
+ return FileThreadTask1<R, T, typename CrossThreadCopier<P1>::Type, MP1>::create(
callee,
method,
CrossThreadCopier<P1>::copy(parameter1));
}
-template<typename R, typename P1, typename MP1, typename P2, typename MP2>
+template<typename R, typename T, typename P1, typename MP1, typename P2, typename MP2>
PassOwnPtr<FileThread::Task> createFileThreadTask(
- FileStream* const callee,
- R (FileStream::*method)(MP1, MP2),
+ T* const callee,
+ R (T::*method)(MP1, MP2),
const P1& parameter1,
const P2& parameter2)
{
- return FileThreadTask2<R, typename CrossThreadCopier<P1>::Type, MP1, typename CrossThreadCopier<P2>::Type, MP2>::create(
+ return FileThreadTask2<R, T, typename CrossThreadCopier<P1>::Type, MP1, typename CrossThreadCopier<P2>::Type, MP2>::create(
callee,
method,
CrossThreadCopier<P1>::copy(parameter1),
CrossThreadCopier<P2>::copy(parameter2));
}
-template<typename R, typename P1, typename MP1, typename P2, typename MP2, typename P3, typename MP3>
+template<typename R, typename T, typename P1, typename MP1, typename P2, typename MP2, typename P3, typename MP3>
PassOwnPtr<FileThread::Task> createFileThreadTask(
- FileStream* const callee,
- R (FileStream::*method)(MP1, MP2, MP3),
+ T* const callee,
+ R (T::*method)(MP1, MP2, MP3),
const P1& parameter1,
const P2& parameter2,
const P3& parameter3)
{
- return FileThreadTask3<R, typename CrossThreadCopier<P1>::Type, MP1, typename CrossThreadCopier<P2>::Type, MP2, typename CrossThreadCopier<P3>::Type, MP3>::create(
+ return FileThreadTask3<R, T, typename CrossThreadCopier<P1>::Type, MP1, typename CrossThreadCopier<P2>::Type, MP2, typename CrossThreadCopier<P3>::Type, MP3>::create(
callee,
method,
CrossThreadCopier<P1>::copy(parameter1),
--
WebKit Debian packaging
More information about the Pkg-webkit-commits
mailing list