Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(342)

Side by Side Diff: third_party/WebKit/Source/core/workers/WorkletModuleResponsesMapProxy.cpp

Issue 2939773005: [POC] Implement "module responses map" concept (Closed)
Patch Set: rebase Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2017 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 #include "core/workers/WorkletModuleResponsesMapProxy.h"
6
7 #include "core/loader/modulescript/ModuleScriptCreationParams.h"
8 #include "platform/CrossThreadFunctional.h"
9 #include "platform/wtf/Functional.h"
10
11 namespace blink {
12
13 namespace {
14
15 // ClientAdapter mediates WorkletModuleResponsesMap on the main thread and
16 // WorkletModuileResponsesMap::Client implementation on the worklet context
17 // thread. This lives on the main thread.
18 class ClientAdapter final : public GarbageCollectedFinalized<ClientAdapter>,
19 public WorkletModuleResponsesMap::Client {
20 USING_GARBAGE_COLLECTED_MIXIN(ClientAdapter);
21
22 public:
23 ClientAdapter(WorkletModuleResponsesMap::Client* client,
24 RefPtr<WebTaskRunner> inside_settings_task_runner)
25 : client_(client),
26 inside_settings_task_runner_(std::move(inside_settings_task_runner)) {}
27 ~ClientAdapter() override = default;
28
29 void OnRead(const ModuleScriptCreationParams& params) override {
30 DCHECK(IsMainThread());
31 inside_settings_task_runner_->PostTask(
32 BLINK_FROM_HERE,
33 CrossThreadBind(&WorkletModuleResponsesMap::Client::OnRead, client_,
34 params));
35 }
36 void OnFetchNeeded() override {
37 DCHECK(IsMainThread());
38 inside_settings_task_runner_->PostTask(
39 BLINK_FROM_HERE,
40 CrossThreadBind(&WorkletModuleResponsesMap::Client::OnFetchNeeded,
41 client_));
42 }
43 void OnFailed() override {
44 DCHECK(IsMainThread());
45 inside_settings_task_runner_->PostTask(
46 BLINK_FROM_HERE,
47 CrossThreadBind(&WorkletModuleResponsesMap::Client::OnFailed, client_));
48 }
49
50 DEFINE_INLINE_VIRTUAL_TRACE() {}
51
52 private:
53 CrossThreadPersistent<WorkletModuleResponsesMap::Client> client_;
54 RefPtr<WebTaskRunner> inside_settings_task_runner_;
55 };
56
57 } // namespace
58
59 WorkletModuleResponsesMapProxy::WorkletModuleResponsesMapProxy(
60 WorkletModuleResponsesMap* module_responses_map,
61 RefPtr<WebTaskRunner> outside_settings_task_runner,
62 RefPtr<WebTaskRunner> inside_settings_task_runner)
63 : module_responses_map_(module_responses_map),
64 outside_settings_task_runner_(outside_settings_task_runner),
65 inside_settings_task_runner_(inside_settings_task_runner) {
66 DCHECK(module_responses_map_);
67 DCHECK(outside_settings_task_runner_);
68 DCHECK(inside_settings_task_runner_);
69 DCHECK(inside_settings_task_runner_->RunsTasksInCurrentSequence());
70 }
71
72 void WorkletModuleResponsesMapProxy::ReadEntry(const KURL& url,
73 Client* client) {
74 DCHECK(inside_settings_task_runner_->RunsTasksInCurrentSequence());
75 outside_settings_task_runner_->PostTask(
76 BLINK_FROM_HERE,
77 CrossThreadBind(&WorkletModuleResponsesMapProxy::ReadEntryOnMainThread,
78 WrapCrossThreadPersistent(this), url,
79 WrapCrossThreadPersistent(client)));
80 }
81
82 void WorkletModuleResponsesMapProxy::UpdateEntry(
83 const KURL& url,
84 const ModuleScriptCreationParams& params) {
85 DCHECK(inside_settings_task_runner_->RunsTasksInCurrentSequence());
86 outside_settings_task_runner_->PostTask(
87 BLINK_FROM_HERE, CrossThreadBind(&WorkletModuleResponsesMap::UpdateEntry,
88 module_responses_map_, url, params));
89 }
90
91 void WorkletModuleResponsesMapProxy::InvalidateEntry(const KURL& url) {
92 DCHECK(inside_settings_task_runner_->RunsTasksInCurrentSequence());
93 outside_settings_task_runner_->PostTask(
94 BLINK_FROM_HERE,
95 CrossThreadBind(&WorkletModuleResponsesMap::InvalidateEntry,
96 module_responses_map_, url));
97 }
98
99 DEFINE_TRACE(WorkletModuleResponsesMapProxy) {}
100
101 void WorkletModuleResponsesMapProxy::ReadEntryOnMainThread(const KURL& url,
102 Client* client) {
103 DCHECK(IsMainThread());
104 ClientAdapter* wrapper =
105 new ClientAdapter(client, inside_settings_task_runner_);
106 module_responses_map_->ReadOrCreateEntry(url, wrapper);
107 }
108
109 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698