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

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

Issue 959803003: web-threads: Create a single instance of WebThread for each blink thread. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: . Created 5 years, 9 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/child/webthread_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
11 #include "base/allocator/allocator_extension.h" 11 #include "base/allocator/allocator_extension.h"
12 #include "base/bind.h" 12 #include "base/bind.h"
13 #include "base/files/file_path.h" 13 #include "base/files/file_path.h"
14 #include "base/memory/scoped_ptr.h" 14 #include "base/memory/scoped_ptr.h"
15 #include "base/memory/singleton.h" 15 #include "base/memory/singleton.h"
16 #include "base/message_loop/message_loop.h"
17 #include "base/metrics/histogram.h" 16 #include "base/metrics/histogram.h"
18 #include "base/metrics/sparse_histogram.h" 17 #include "base/metrics/sparse_histogram.h"
19 #include "base/process/process_metrics.h" 18 #include "base/process/process_metrics.h"
20 #include "base/rand_util.h" 19 #include "base/rand_util.h"
21 #include "base/strings/string_number_conversions.h" 20 #include "base/strings/string_number_conversions.h"
22 #include "base/strings/string_util.h" 21 #include "base/strings/string_util.h"
23 #include "base/strings/utf_string_conversions.h" 22 #include "base/strings/utf_string_conversions.h"
24 #include "base/synchronization/lock.h" 23 #include "base/synchronization/lock.h"
25 #include "base/synchronization/waitable_event.h" 24 #include "base/synchronization/waitable_event.h"
26 #include "base/sys_info.h" 25 #include "base/sys_info.h"
(...skipping 383 matching lines...) Expand 10 before | Expand all | Expand 10 after
410 break; 409 break;
411 } 410 }
412 return -1; 411 return -1;
413 } 412 }
414 413
415 BlinkPlatformImpl::BlinkPlatformImpl() 414 BlinkPlatformImpl::BlinkPlatformImpl()
416 : main_thread_task_runner_(base::MessageLoopProxy::current()), 415 : main_thread_task_runner_(base::MessageLoopProxy::current()),
417 shared_timer_func_(NULL), 416 shared_timer_func_(NULL),
418 shared_timer_fire_time_(0.0), 417 shared_timer_fire_time_(0.0),
419 shared_timer_fire_time_was_set_while_suspended_(false), 418 shared_timer_fire_time_was_set_while_suspended_(false),
420 shared_timer_suspended_(0), 419 shared_timer_suspended_(0) {
421 current_thread_slot_(&DestroyCurrentThread) {
422 InternalInit(); 420 InternalInit();
423 } 421 }
424 422
425 BlinkPlatformImpl::BlinkPlatformImpl( 423 BlinkPlatformImpl::BlinkPlatformImpl(
426 scoped_refptr<base::SingleThreadTaskRunner> main_thread_task_runner) 424 scoped_refptr<base::SingleThreadTaskRunner> main_thread_task_runner)
427 : main_thread_task_runner_(main_thread_task_runner), 425 : main_thread_task_runner_(main_thread_task_runner),
428 shared_timer_func_(NULL), 426 shared_timer_func_(NULL),
429 shared_timer_fire_time_(0.0), 427 shared_timer_fire_time_(0.0),
430 shared_timer_fire_time_was_set_while_suspended_(false), 428 shared_timer_fire_time_was_set_while_suspended_(false),
431 shared_timer_suspended_(0), 429 shared_timer_suspended_(0) {
432 current_thread_slot_(&DestroyCurrentThread) {
433 // TODO(alexclarke): Use c++11 delegated constructors when allowed. 430 // TODO(alexclarke): Use c++11 delegated constructors when allowed.
434 InternalInit(); 431 InternalInit();
435 } 432 }
436 433
437 void BlinkPlatformImpl::InternalInit() { 434 void BlinkPlatformImpl::InternalInit() {
438 // ChildThread may not exist in some tests. 435 // ChildThread may not exist in some tests.
439 if (ChildThreadImpl::current()) { 436 if (ChildThreadImpl::current()) {
440 geofencing_provider_.reset(new WebGeofencingProviderImpl( 437 geofencing_provider_.reset(new WebGeofencingProviderImpl(
441 ChildThreadImpl::current()->thread_safe_sender())); 438 ChildThreadImpl::current()->thread_safe_sender()));
442 bluetooth_.reset( 439 bluetooth_.reset(
443 new WebBluetoothImpl(ChildThreadImpl::current()->thread_safe_sender())); 440 new WebBluetoothImpl(ChildThreadImpl::current()->thread_safe_sender()));
444 thread_safe_sender_ = ChildThreadImpl::current()->thread_safe_sender(); 441 thread_safe_sender_ = ChildThreadImpl::current()->thread_safe_sender();
445 notification_dispatcher_ = 442 notification_dispatcher_ =
446 ChildThreadImpl::current()->notification_dispatcher(); 443 ChildThreadImpl::current()->notification_dispatcher();
447 push_dispatcher_ = ChildThreadImpl::current()->push_dispatcher(); 444 push_dispatcher_ = ChildThreadImpl::current()->push_dispatcher();
448 } 445 }
449 446
450 if (main_thread_task_runner_.get()) { 447 if (main_thread_task_runner_.get()) {
451 shared_timer_.SetTaskRunner(main_thread_task_runner_); 448 shared_timer_.SetTaskRunner(main_thread_task_runner_);
452 } 449 }
453 } 450 }
454 451
452 void BlinkPlatformImpl::UpdateWebThreadTLS(blink::WebThread* thread) {
453 DCHECK(!current_thread_slot_.Get());
454 current_thread_slot_.Set(thread);
455 }
456
455 BlinkPlatformImpl::~BlinkPlatformImpl() { 457 BlinkPlatformImpl::~BlinkPlatformImpl() {
456 } 458 }
457 459
458 WebURLLoader* BlinkPlatformImpl::createURLLoader() { 460 WebURLLoader* BlinkPlatformImpl::createURLLoader() {
459 ChildThreadImpl* child_thread = ChildThreadImpl::current(); 461 ChildThreadImpl* child_thread = ChildThreadImpl::current();
460 // There may be no child thread in RenderViewTests. These tests can still use 462 // There may be no child thread in RenderViewTests. These tests can still use
461 // data URLs to bypass the ResourceDispatcher. 463 // data URLs to bypass the ResourceDispatcher.
462 return new WebURLLoaderImpl( 464 return new WebURLLoaderImpl(
463 child_thread ? child_thread->resource_dispatcher() : NULL, 465 child_thread ? child_thread->resource_dispatcher() : NULL,
464 MainTaskRunnerForCurrentThread()); 466 MainTaskRunnerForCurrentThread());
(...skipping 27 matching lines...) Expand all
492 494
493 bool BlinkPlatformImpl::isReservedIPAddress( 495 bool BlinkPlatformImpl::isReservedIPAddress(
494 const blink::WebString& host) const { 496 const blink::WebString& host) const {
495 net::IPAddressNumber address; 497 net::IPAddressNumber address;
496 if (!net::ParseURLHostnameToNumber(host.utf8(), &address)) 498 if (!net::ParseURLHostnameToNumber(host.utf8(), &address))
497 return false; 499 return false;
498 return net::IsIPAddressReserved(address); 500 return net::IsIPAddressReserved(address);
499 } 501 }
500 502
501 blink::WebThread* BlinkPlatformImpl::createThread(const char* name) { 503 blink::WebThread* BlinkPlatformImpl::createThread(const char* name) {
502 return new WebThreadImpl(name); 504 WebThreadImpl* thread = new WebThreadImpl(name);
505 thread->TaskRunner()->PostTask(
506 FROM_HERE, base::Bind(&BlinkPlatformImpl::UpdateWebThreadTLS,
507 base::Unretained(this), thread));
508 return thread;
503 } 509 }
504 510
505 blink::WebThread* BlinkPlatformImpl::currentThread() { 511 blink::WebThread* BlinkPlatformImpl::currentThread() {
506 WebThreadImplForMessageLoop* thread = 512 return static_cast<blink::WebThread*>(current_thread_slot_.Get());
507 static_cast<WebThreadImplForMessageLoop*>(current_thread_slot_.Get());
508 if (thread)
509 return (thread);
510
511 scoped_refptr<base::SingleThreadTaskRunner> task_runner =
512 MainTaskRunnerForCurrentThread();
513 if (!task_runner.get())
514 return NULL;
515
516 thread = new WebThreadImplForMessageLoop(task_runner);
517 current_thread_slot_.Set(thread);
518 return thread;
519 } 513 }
520 514
521 void BlinkPlatformImpl::yieldCurrentThread() { 515 void BlinkPlatformImpl::yieldCurrentThread() {
522 base::PlatformThread::YieldCurrentThread(); 516 base::PlatformThread::YieldCurrentThread();
523 } 517 }
524 518
525 blink::WebWaitableEvent* BlinkPlatformImpl::createWaitableEvent() { 519 blink::WebWaitableEvent* BlinkPlatformImpl::createWaitableEvent() {
526 return new WebWaitableEventImpl(); 520 return new WebWaitableEventImpl();
527 } 521 }
528 522
(...skipping 708 matching lines...) Expand 10 before | Expand all | Expand 10 after
1237 scoped_refptr<base::SingleThreadTaskRunner> 1231 scoped_refptr<base::SingleThreadTaskRunner>
1238 BlinkPlatformImpl::MainTaskRunnerForCurrentThread() { 1232 BlinkPlatformImpl::MainTaskRunnerForCurrentThread() {
1239 if (main_thread_task_runner_.get() && 1233 if (main_thread_task_runner_.get() &&
1240 main_thread_task_runner_->BelongsToCurrentThread()) { 1234 main_thread_task_runner_->BelongsToCurrentThread()) {
1241 return main_thread_task_runner_; 1235 return main_thread_task_runner_;
1242 } else { 1236 } else {
1243 return base::MessageLoopProxy::current(); 1237 return base::MessageLoopProxy::current();
1244 } 1238 }
1245 } 1239 }
1246 1240
1247 // static
1248 void BlinkPlatformImpl::DestroyCurrentThread(void* thread) {
1249 WebThreadImplForMessageLoop* impl =
1250 static_cast<WebThreadImplForMessageLoop*>(thread);
1251 delete impl;
1252 }
1253
1254 WebString BlinkPlatformImpl::domCodeStringFromEnum(int dom_code) { 1241 WebString BlinkPlatformImpl::domCodeStringFromEnum(int dom_code) {
1255 return WebString::fromUTF8(ui::KeycodeConverter::DomCodeToCodeString( 1242 return WebString::fromUTF8(ui::KeycodeConverter::DomCodeToCodeString(
1256 static_cast<ui::DomCode>(dom_code))); 1243 static_cast<ui::DomCode>(dom_code)));
1257 } 1244 }
1258 1245
1259 int BlinkPlatformImpl::domEnumFromCodeString(const WebString& code) { 1246 int BlinkPlatformImpl::domEnumFromCodeString(const WebString& code) {
1260 return static_cast<int>(ui::KeycodeConverter::CodeStringToDomCode( 1247 return static_cast<int>(ui::KeycodeConverter::CodeStringToDomCode(
1261 code.utf8().data())); 1248 code.utf8().data()));
1262 } 1249 }
1263 1250
1264 } // namespace content 1251 } // namespace content
OLDNEW
« no previous file with comments | « content/child/blink_platform_impl.h ('k') | content/child/webthread_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698