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

Side by Side Diff: content/child/blink_platform_impl.cc

Issue 1589463002: compositor worker: Use a WebThread for the compositor thread. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: self.nit Created 4 years, 11 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
« no previous file with comments | « content/child/blink_platform_impl.h ('k') | content/renderer/render_thread_impl.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/child/blink_platform_impl.h" 5 #include "content/child/blink_platform_impl.h"
6 6
7 #include <math.h> 7 #include <math.h>
8 8
9 #include <vector> 9 #include <vector>
10 10
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
76 #include "ui/events/keycodes/dom/keycode_converter.h" 76 #include "ui/events/keycodes/dom/keycode_converter.h"
77 77
78 using blink::WebData; 78 using blink::WebData;
79 using blink::WebFallbackThemeEngine; 79 using blink::WebFallbackThemeEngine;
80 using blink::WebLocalizedString; 80 using blink::WebLocalizedString;
81 using blink::WebString; 81 using blink::WebString;
82 using blink::WebThemeEngine; 82 using blink::WebThemeEngine;
83 using blink::WebURL; 83 using blink::WebURL;
84 using blink::WebURLError; 84 using blink::WebURLError;
85 using blink::WebURLLoader; 85 using blink::WebURLLoader;
86 using scheduler::WebThreadImplForWorkerScheduler;
86 87
87 namespace content { 88 namespace content {
88 89
89 namespace { 90 namespace {
90 91
91 class WebWaitableEventImpl : public blink::WebWaitableEvent { 92 class WebWaitableEventImpl : public blink::WebWaitableEvent {
92 public: 93 public:
93 WebWaitableEventImpl(ResetPolicy policy, InitialState state) { 94 WebWaitableEventImpl(ResetPolicy policy, InitialState state) {
94 bool manual_reset = policy == ResetPolicy::Manual; 95 bool manual_reset = policy == ResetPolicy::Manual;
95 bool initially_signaled = state == InitialState::Signaled; 96 bool initially_signaled = state == InitialState::Signaled;
(...skipping 379 matching lines...) Expand 10 before | Expand all | Expand 10 after
475 notification_dispatcher_ = 476 notification_dispatcher_ =
476 ChildThreadImpl::current()->notification_dispatcher(); 477 ChildThreadImpl::current()->notification_dispatcher();
477 push_dispatcher_ = ChildThreadImpl::current()->push_dispatcher(); 478 push_dispatcher_ = ChildThreadImpl::current()->push_dispatcher();
478 permission_client_.reset(new PermissionDispatcher( 479 permission_client_.reset(new PermissionDispatcher(
479 ChildThreadImpl::current()->service_registry())); 480 ChildThreadImpl::current()->service_registry()));
480 main_thread_sync_provider_.reset( 481 main_thread_sync_provider_.reset(
481 new BackgroundSyncProvider(main_thread_task_runner_.get())); 482 new BackgroundSyncProvider(main_thread_task_runner_.get()));
482 } 483 }
483 } 484 }
484 485
486 void BlinkPlatformImpl::WaitUntilWebThreadTLSUpdate(
487 scheduler::WebThreadBase* thread) {
488 base::WaitableEvent event(false, false);
489 thread->TaskRunner()->PostTask(
490 FROM_HERE,
491 base::Bind(&BlinkPlatformImpl::UpdateWebThreadTLS, base::Unretained(this),
492 base::Unretained(thread), base::Unretained(&event)));
493 event.Wait();
494 }
495
485 void BlinkPlatformImpl::UpdateWebThreadTLS(blink::WebThread* thread, 496 void BlinkPlatformImpl::UpdateWebThreadTLS(blink::WebThread* thread,
486 base::WaitableEvent* event) { 497 base::WaitableEvent* event) {
487 DCHECK(!current_thread_slot_.Get()); 498 DCHECK(!current_thread_slot_.Get());
488 current_thread_slot_.Set(thread); 499 current_thread_slot_.Set(thread);
489 event->Signal(); 500 event->Signal();
490 } 501 }
491 502
492 BlinkPlatformImpl::~BlinkPlatformImpl() { 503 BlinkPlatformImpl::~BlinkPlatformImpl() {
493 } 504 }
494 505
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
544 bool BlinkPlatformImpl::portAllowed(const blink::WebURL& url) const { 555 bool BlinkPlatformImpl::portAllowed(const blink::WebURL& url) const {
545 GURL gurl = GURL(url); 556 GURL gurl = GURL(url);
546 // Return true for URLs without a port specified. This is needed to let 557 // Return true for URLs without a port specified. This is needed to let
547 // through non-network schemes that don't go over the network. 558 // through non-network schemes that don't go over the network.
548 if (!gurl.has_port()) 559 if (!gurl.has_port())
549 return true; 560 return true;
550 return net::IsPortAllowedForScheme(gurl.EffectiveIntPort(), gurl.scheme()); 561 return net::IsPortAllowedForScheme(gurl.EffectiveIntPort(), gurl.scheme());
551 } 562 }
552 563
553 blink::WebThread* BlinkPlatformImpl::createThread(const char* name) { 564 blink::WebThread* BlinkPlatformImpl::createThread(const char* name) {
554 return createThreadWithOptions(name, base::Thread::Options()).release(); 565 scoped_ptr<WebThreadImplForWorkerScheduler> thread(
566 new WebThreadImplForWorkerScheduler(name));
567 thread->Init();
568 WaitUntilWebThreadTLSUpdate(thread.get());
569 return thread.release();
555 } 570 }
556 571
557 scoped_ptr<scheduler::WebThreadBase> BlinkPlatformImpl::createThreadWithOptions( 572 void BlinkPlatformImpl::SetCompositorThread(
558 const char* name, 573 scheduler::WebThreadBase* compositor_thread) {
559 base::Thread::Options options) { 574 compositor_thread_ = compositor_thread;
560 scoped_ptr<scheduler::WebThreadBase> thread( 575 if (compositor_thread_)
561 new scheduler::WebThreadImplForWorkerScheduler(name, options)); 576 WaitUntilWebThreadTLSUpdate(compositor_thread_);
562 base::WaitableEvent event(false, false);
563 thread->TaskRunner()->PostTask(
564 FROM_HERE,
565 base::Bind(&BlinkPlatformImpl::UpdateWebThreadTLS, base::Unretained(this),
566 base::Unretained(thread.get()), base::Unretained(&event)));
567 event.Wait();
568 return thread;
569 } 577 }
570 578
571 blink::WebThread* BlinkPlatformImpl::currentThread() { 579 blink::WebThread* BlinkPlatformImpl::currentThread() {
572 return static_cast<blink::WebThread*>(current_thread_slot_.Get()); 580 return static_cast<blink::WebThread*>(current_thread_slot_.Get());
573 } 581 }
574 582
575 void BlinkPlatformImpl::yieldCurrentThread() { 583 void BlinkPlatformImpl::yieldCurrentThread() {
576 base::PlatformThread::YieldCurrentThread(); 584 base::PlatformThread::YieldCurrentThread();
577 } 585 }
578 586
(...skipping 718 matching lines...) Expand 10 before | Expand all | Expand 10 after
1297 return WebString::fromUTF8(ui::KeycodeConverter::DomKeyToKeyString( 1305 return WebString::fromUTF8(ui::KeycodeConverter::DomKeyToKeyString(
1298 static_cast<ui::DomKey>(dom_key))); 1306 static_cast<ui::DomKey>(dom_key)));
1299 } 1307 }
1300 1308
1301 int BlinkPlatformImpl::domKeyEnumFromString(const WebString& key_string) { 1309 int BlinkPlatformImpl::domKeyEnumFromString(const WebString& key_string) {
1302 return static_cast<int>( 1310 return static_cast<int>(
1303 ui::KeycodeConverter::KeyStringToDomKey(key_string.utf8())); 1311 ui::KeycodeConverter::KeyStringToDomKey(key_string.utf8()));
1304 } 1312 }
1305 1313
1306 } // namespace content 1314 } // namespace content
OLDNEW
« no previous file with comments | « content/child/blink_platform_impl.h ('k') | content/renderer/render_thread_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698