[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