| // Copyright 2019 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef ANDROID_WEBVIEW_BROWSER_GFX_TASK_QUEUE_WEB_VIEW_H_ |
| #define ANDROID_WEBVIEW_BROWSER_GFX_TASK_QUEUE_WEB_VIEW_H_ |
| |
| #include "base/callback.h" |
| #include "base/macros.h" |
| #include "base/memory/scoped_refptr.h" |
| #include "base/single_thread_task_runner.h" |
| |
| namespace android_webview { |
| |
| // This class is used to control when to access GL. |
| class ScopedAllowGL { |
| public: |
| ScopedAllowGL(); |
| ~ScopedAllowGL(); |
| |
| private: |
| DISALLOW_COPY_AND_ASSIGN(ScopedAllowGL); |
| }; |
| |
| // In WebView, there is a single task queue that runs all tasks instead of |
| // thread task runners. This is the class actually scheduling and running tasks |
| // for WebView. This is used by both CommandBuffer and SkiaDDL. |
| class TaskQueueWebView { |
| public: |
| // Static method that makes sure this is only one copy of this class. |
| static TaskQueueWebView* GetInstance(); |
| |
| // Methods only used when kVizForWebView is enabled, ie client is the viz |
| // thread. |
| virtual void InitializeVizThread( |
| const scoped_refptr<base::SingleThreadTaskRunner>& viz_task_runner) = 0; |
| // The calling OnceClosure unblocks the render thread, and disallows further |
| // calls to ScheduleTask. |
| using VizTask = base::OnceCallback<void(base::OnceClosure)>; |
| virtual void ScheduleOnVizAndBlock(VizTask viz_task) = 0; |
| |
| // Called by TaskForwardingSequence. |out_of_order| indicates if task should |
| // be run ahead of already enqueued tasks. |
| virtual void ScheduleTask(base::OnceClosure task, bool out_of_order) = 0; |
| |
| // Called by TaskForwardingSequence. |
| virtual void ScheduleOrRetainTask(base::OnceClosure task) = 0; |
| |
| // Called by DeferredGpuCommandService to schedule delayed tasks. |
| // This should not be called when kVizForWebView is enabled. |
| virtual void ScheduleIdleTask(base::OnceClosure task) = 0; |
| |
| // Called by both DeferredGpuCommandService and |
| // SkiaOutputSurfaceDisplayContext to post task to client thread. |
| virtual void ScheduleClientTask(base::OnceClosure task) = 0; |
| |
| protected: |
| friend ScopedAllowGL; |
| |
| virtual ~TaskQueueWebView() = default; |
| |
| // Called by ScopedAllowGL. |
| virtual void RunAllTasks() = 0; |
| }; |
| |
| } // namespace android_webview |
| |
| #endif // ANDROID_WEBVIEW_BROWSER_GFX_TASK_QUEUE_WEB_VIEW_H_ |