Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / Source / bindings / core / v8 / ScriptStreamerThread.h
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef ScriptStreamerThread_h
6 #define ScriptStreamerThread_h
7
8 #include "platform/TaskSynchronizer.h"
9 #include "public/platform/WebThread.h"
10 #include "wtf/OwnPtr.h"
11
12 #include <v8.h>
13
14 namespace blink {
15
16 class ScriptStreamer;
17
18 // A singleton thread for running background tasks for script streaming.
19 class ScriptStreamerThread {
20     WTF_MAKE_NONCOPYABLE(ScriptStreamerThread);
21 public:
22     static void init();
23     static void shutdown();
24     static ScriptStreamerThread* shared();
25
26     void postTask(WebThread::Task*);
27
28     bool isRunningTask() const
29     {
30         MutexLocker locker(m_mutex);
31         return m_runningTask;
32     }
33
34     void taskDone();
35
36 private:
37     ScriptStreamerThread()
38         : m_runningTask(false) { }
39
40     bool isRunning() const
41     {
42         return !!m_thread;
43     }
44
45     blink::WebThread& platformThread();
46
47     // At the moment, we only use one thread, so we can only stream one script
48     // at a time. FIXME: Use a thread pool and stream multiple scripts.
49     WTF::OwnPtr<blink::WebThread> m_thread;
50     bool m_runningTask;
51     mutable Mutex m_mutex; // Guards m_runningTask.
52 };
53
54 class ScriptStreamingTask : public WebThread::Task {
55     WTF_MAKE_NONCOPYABLE(ScriptStreamingTask);
56 public:
57     ScriptStreamingTask(WTF::PassOwnPtr<v8::ScriptCompiler::ScriptStreamingTask>, ScriptStreamer*);
58     virtual void run() override;
59
60 private:
61     WTF::OwnPtr<v8::ScriptCompiler::ScriptStreamingTask> m_v8Task;
62     ScriptStreamer* m_streamer;
63 };
64
65
66 } // namespace blink
67
68 #endif // ScriptStreamerThread_h