[webkit-reviews] review denied: [Bug 43135] Decouple FileThread from FileStream to support generic file-related async tasks : [Attachment 62860] Patch

bugzilla-daemon at webkit.org bugzilla-daemon at webkit.org
Wed Jul 28 15:01:15 PDT 2010


Jian Li <jianli at chromium.org> has denied Kinuko Yasuda <kinuko at chromium.org>'s
request for review:
Bug 43135: Decouple FileThread from FileStream to support generic file-related
async tasks
https://bugs.webkit.org/show_bug.cgi?id=43135

Attachment 62860: Patch
https://bugs.webkit.org/attachment.cgi?id=62860&action=review

------- Additional Comments from Jian Li <jianli at chromium.org>
It is a good idea to support generic file related async tasks. However, I am
thinking if it is possible to make current FileThreadTask support calling any
class methods asynchronously. How about something like the following:

// FileThread.h
    ...

    class Task : public Noncopyable {
    public:
	virtual ~Task() { }
	virtual void performTask() = 0;
	void* instance() const { return m_instance; }
    protected:
	Task(void* instance) : m_instance(instance) { }
	void* m_instance;
    };

    void postTask(PassOwnPtr<Task> task);
    void unscheduleTasks(const void* instance);

// FileThreadTask.h

...

template<typename R, typename T>
class FileThreadTask0 : public FileThread::Task {
public:
    typedef R (T::*Method)();
    typedef FileThreadTask0<R, T> FileThreadTask;

    static PassOwnPtr<FileThreadTask> create(T* instance, Method method)
    {
	return new FileThreadTask(instance, method);
    }

private:
    FileThreadTask0(T* instance, Method method)
	: FileThread::Task(instance)
	, m_method(method)
    {
    }

    virtual void performTask()
    {
	(*reinterpret_cast<T*>(instance()).*m_method)();
    }

private:
    Method m_method;
};

...

template<typename R, typename T>
PassOwnPtr<FileThread::Task> createFileThreadTask(
    T* const callee,
    R (T::*method)())
{
    return FileThreadTask0<R, T>::create(
	callee,
	method);
}


More information about the webkit-reviews mailing list