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

Side by Side Diff: content/browser/service_worker/embedded_worker_instance.cc

Issue 2821253002: [ServiceWorker] Integrate trace events in embedded worker instance (Closed)
Patch Set: Created 3 years, 8 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 | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/browser/service_worker/embedded_worker_instance.h" 5 #include "content/browser/service_worker/embedded_worker_instance.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/bind_helpers.h" 9 #include "base/bind_helpers.h"
10 #include "base/macros.h" 10 #include "base/macros.h"
(...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after
233 233
234 StartTask(EmbeddedWorkerInstance* instance, 234 StartTask(EmbeddedWorkerInstance* instance,
235 const GURL& script_url, 235 const GURL& script_url,
236 mojom::EmbeddedWorkerInstanceClientRequest request) 236 mojom::EmbeddedWorkerInstanceClientRequest request)
237 : instance_(instance), 237 : instance_(instance),
238 request_(std::move(request)), 238 request_(std::move(request)),
239 state_(ProcessAllocationState::NOT_ALLOCATED), 239 state_(ProcessAllocationState::NOT_ALLOCATED),
240 is_installed_(false), 240 is_installed_(false),
241 started_during_browser_startup_(false), 241 started_during_browser_startup_(false),
242 weak_factory_(this) { 242 weak_factory_(this) {
243 TRACE_EVENT_ASYNC_BEGIN1("ServiceWorker", "EmbeddedWorkerInstance::Start", 243 TRACE_EVENT_NESTABLE_ASYNC_BEGIN1("ServiceWorker",
leonhsl(Using Gerrit) 2017/04/19 03:43:43 I think using StartTask ctor/dtor to control "Embe
shimazu 2017/04/19 07:54:35 Thanks for explanation! It makes sense.
244 this, "Script", script_url.spec()); 244 "EmbeddedWorkerInstance::Start",
245 instance_, "Script", script_url.spec());
245 } 246 }
246 247
247 ~StartTask() { 248 ~StartTask() {
248 DCHECK_CURRENTLY_ON(BrowserThread::IO); 249 DCHECK_CURRENTLY_ON(BrowserThread::IO);
249 TRACE_EVENT_ASYNC_END0("ServiceWorker", "EmbeddedWorkerInstance::Start", 250 TRACE_EVENT_NESTABLE_ASYNC_END0("ServiceWorker",
250 this); 251 "EmbeddedWorkerInstance::Start", instance_);
251 252
252 if (!instance_->context_) 253 if (!instance_->context_)
253 return; 254 return;
254 255
255 switch (state_) { 256 switch (state_) {
256 case ProcessAllocationState::NOT_ALLOCATED: 257 case ProcessAllocationState::NOT_ALLOCATED:
257 // Not necessary to release a process. 258 // Not necessary to release a process.
258 break; 259 break;
259 case ProcessAllocationState::ALLOCATING: 260 case ProcessAllocationState::ALLOCATING:
260 // Abort half-baked process allocation on the UI thread. 261 // Abort half-baked process allocation on the UI thread.
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
313 314
314 private: 315 private:
315 void OnProcessAllocated(std::unique_ptr<EmbeddedWorkerStartParams> params, 316 void OnProcessAllocated(std::unique_ptr<EmbeddedWorkerStartParams> params,
316 ServiceWorkerStatusCode status, 317 ServiceWorkerStatusCode status,
317 int process_id, 318 int process_id,
318 bool is_new_process, 319 bool is_new_process,
319 const EmbeddedWorkerSettings& settings) { 320 const EmbeddedWorkerSettings& settings) {
320 DCHECK_CURRENTLY_ON(BrowserThread::IO); 321 DCHECK_CURRENTLY_ON(BrowserThread::IO);
321 322
322 if (status != SERVICE_WORKER_OK) { 323 if (status != SERVICE_WORKER_OK) {
323 TRACE_EVENT_ASYNC_STEP_PAST1( 324 TRACE_EVENT_NESTABLE_ASYNC_INSTANT2(
324 "ServiceWorker", "EmbeddedWorkerInstance::Start", this, 325 "ServiceWorker", "EmbeddedWorkerInstance::Start", instance_, "Step",
shimazu 2017/04/19 07:54:35 Each INSTANT can have different name as long as yo
leonhsl(Using Gerrit) 2017/04/19 10:40:23 I'm not quite sure about this, instead of NESTABLE
shimazu 2017/04/20 04:51:46 Yes, exactly. According to the CL which introduces
leonhsl(Using Gerrit) 2017/04/21 02:46:29 Done.
325 "OnProcessAllocated", "Error", ServiceWorkerStatusToString(status)); 326 "OnProcessAllocated", "Error", ServiceWorkerStatusToString(status));
326 DCHECK_EQ(ChildProcessHost::kInvalidUniqueID, process_id); 327 DCHECK_EQ(ChildProcessHost::kInvalidUniqueID, process_id);
327 StatusCallback callback = start_callback_; 328 StatusCallback callback = start_callback_;
328 start_callback_.Reset(); 329 start_callback_.Reset();
329 instance_->OnStartFailed(callback, status); 330 instance_->OnStartFailed(callback, status);
330 // |this| may be destroyed. 331 // |this| may be destroyed.
331 return; 332 return;
332 } 333 }
333 334
334 TRACE_EVENT_ASYNC_STEP_PAST1( 335 TRACE_EVENT_NESTABLE_ASYNC_INSTANT2(
335 "ServiceWorker", "EmbeddedWorkerInstance::Start", this, 336 "ServiceWorker", "EmbeddedWorkerInstance::Start", instance_, "Step",
336 "OnProcessAllocated", "Is New Process", is_new_process); 337 "OnProcessAllocated", "Is New Process", is_new_process);
337 if (is_installed_) 338 if (is_installed_)
338 ServiceWorkerMetrics::RecordProcessCreated(is_new_process); 339 ServiceWorkerMetrics::RecordProcessCreated(is_new_process);
339 340
340 ServiceWorkerMetrics::StartSituation start_situation = 341 ServiceWorkerMetrics::StartSituation start_situation =
341 ServiceWorkerMetrics::StartSituation::UNKNOWN; 342 ServiceWorkerMetrics::StartSituation::UNKNOWN;
342 if (started_during_browser_startup_) 343 if (started_during_browser_startup_)
343 start_situation = ServiceWorkerMetrics::StartSituation::DURING_STARTUP; 344 start_situation = ServiceWorkerMetrics::StartSituation::DURING_STARTUP;
344 else if (is_new_process) 345 else if (is_new_process)
345 start_situation = ServiceWorkerMetrics::StartSituation::NEW_PROCESS; 346 start_situation = ServiceWorkerMetrics::StartSituation::NEW_PROCESS;
(...skipping 24 matching lines...) Expand all
370 base::Bind(&StartTask::OnSetupOnUICompleted, 371 base::Bind(&StartTask::OnSetupOnUICompleted,
371 weak_factory_.GetWeakPtr(), base::Passed(&params), 372 weak_factory_.GetWeakPtr(), base::Passed(&params),
372 is_new_process))); 373 is_new_process)));
373 } 374 }
374 375
375 void OnSetupOnUICompleted(std::unique_ptr<EmbeddedWorkerStartParams> params, 376 void OnSetupOnUICompleted(std::unique_ptr<EmbeddedWorkerStartParams> params,
376 bool is_new_process, 377 bool is_new_process,
377 int worker_devtools_agent_route_id, 378 int worker_devtools_agent_route_id,
378 bool wait_for_debugger) { 379 bool wait_for_debugger) {
379 DCHECK_CURRENTLY_ON(BrowserThread::IO); 380 DCHECK_CURRENTLY_ON(BrowserThread::IO);
380 TRACE_EVENT_ASYNC_STEP_PAST0("ServiceWorker", 381 TRACE_EVENT_NESTABLE_ASYNC_INSTANT1(
381 "EmbeddedWorkerInstance::Start", this, 382 "ServiceWorker", "EmbeddedWorkerInstance::Start", instance_, "Step",
382 "OnSetupOnUICompleted"); 383 "OnSetupOnUICompleted");
383 384
384 // Notify the instance that it is registered to the devtools manager. 385 // Notify the instance that it is registered to the devtools manager.
385 instance_->OnRegisteredToDevToolsManager( 386 instance_->OnRegisteredToDevToolsManager(
386 is_new_process, worker_devtools_agent_route_id, wait_for_debugger); 387 is_new_process, worker_devtools_agent_route_id, wait_for_debugger);
387 388
388 params->worker_devtools_agent_route_id = worker_devtools_agent_route_id; 389 params->worker_devtools_agent_route_id = worker_devtools_agent_route_id;
389 params->wait_for_debugger = wait_for_debugger; 390 params->wait_for_debugger = wait_for_debugger;
390 391
391 ServiceWorkerStatusCode status = 392 ServiceWorkerStatusCode status =
392 instance_->SendStartWorker(std::move(params)); 393 instance_->SendStartWorker(std::move(params));
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after
584 return SERVICE_WORKER_ERROR_ABORT; 585 return SERVICE_WORKER_ERROR_ABORT;
585 586
586 DCHECK(!instance_host_binding_.is_bound()); 587 DCHECK(!instance_host_binding_.is_bound());
587 mojom::EmbeddedWorkerInstanceHostAssociatedPtrInfo host_ptr_info; 588 mojom::EmbeddedWorkerInstanceHostAssociatedPtrInfo host_ptr_info;
588 instance_host_binding_.Bind(&host_ptr_info); 589 instance_host_binding_.Bind(&host_ptr_info);
589 590
590 DCHECK(pending_dispatcher_request_.is_pending()); 591 DCHECK(pending_dispatcher_request_.is_pending());
591 client_->StartWorker(*params, std::move(pending_dispatcher_request_), 592 client_->StartWorker(*params, std::move(pending_dispatcher_request_),
592 std::move(host_ptr_info)); 593 std::move(host_ptr_info));
593 registry_->BindWorkerToProcess(process_id(), embedded_worker_id()); 594 registry_->BindWorkerToProcess(process_id(), embedded_worker_id());
594 TRACE_EVENT_ASYNC_STEP_PAST0("ServiceWorker", "EmbeddedWorkerInstance::Start", 595 TRACE_EVENT_NESTABLE_ASYNC_INSTANT1("ServiceWorker",
595 this, "SendStartWorker"); 596 "EmbeddedWorkerInstance::Start", this,
597 "Step", "SendStartWorker");
596 OnStartWorkerMessageSent(); 598 OnStartWorkerMessageSent();
597 return SERVICE_WORKER_OK; 599 return SERVICE_WORKER_OK;
598 } 600 }
599 601
600 void EmbeddedWorkerInstance::OnStartWorkerMessageSent() { 602 void EmbeddedWorkerInstance::OnStartWorkerMessageSent() {
601 if (!step_time_.is_null()) { 603 if (!step_time_.is_null()) {
602 base::TimeDelta duration = UpdateStepTime(); 604 base::TimeDelta duration = UpdateStepTime();
603 if (inflight_start_task_->is_installed()) { 605 if (inflight_start_task_->is_installed()) {
604 ServiceWorkerMetrics::RecordTimeToSendStartWorker(duration, 606 ServiceWorkerMetrics::RecordTimeToSendStartWorker(duration,
605 start_situation_); 607 start_situation_);
606 } 608 }
607 } 609 }
608 610
609 starting_phase_ = SENT_START_WORKER; 611 starting_phase_ = SENT_START_WORKER;
610 for (auto& observer : listener_list_) 612 for (auto& observer : listener_list_)
611 observer.OnStartWorkerMessageSent(); 613 observer.OnStartWorkerMessageSent();
612 } 614 }
613 615
614 void EmbeddedWorkerInstance::OnReadyForInspection() { 616 void EmbeddedWorkerInstance::OnReadyForInspection() {
615 TRACE_EVENT0("ServiceWorker", "EmbeddedWorkerInstance::OnReadyForInspection"); 617 TRACE_EVENT_NESTABLE_ASYNC_INSTANT1("ServiceWorker",
618 "EmbeddedWorkerInstance::Start", this,
619 "Step", "OnReadyForInspection");
616 if (devtools_proxy_) 620 if (devtools_proxy_)
617 devtools_proxy_->NotifyWorkerReadyForInspection(); 621 devtools_proxy_->NotifyWorkerReadyForInspection();
618 } 622 }
619 623
620 void EmbeddedWorkerInstance::OnScriptReadStarted() { 624 void EmbeddedWorkerInstance::OnScriptReadStarted() {
621 starting_phase_ = SCRIPT_READ_STARTED; 625 starting_phase_ = SCRIPT_READ_STARTED;
622 } 626 }
623 627
624 void EmbeddedWorkerInstance::OnScriptReadFinished() { 628 void EmbeddedWorkerInstance::OnScriptReadFinished() {
625 starting_phase_ = SCRIPT_READ_FINISHED; 629 starting_phase_ = SCRIPT_READ_FINISHED;
626 } 630 }
627 631
628 void EmbeddedWorkerInstance::OnScriptLoaded() { 632 void EmbeddedWorkerInstance::OnScriptLoaded() {
629 using LoadSource = ServiceWorkerMetrics::LoadSource; 633 using LoadSource = ServiceWorkerMetrics::LoadSource;
630 634
631 TRACE_EVENT0("ServiceWorker", "EmbeddedWorkerInstance::OnScriptLoaded");
632
633 if (!inflight_start_task_) 635 if (!inflight_start_task_)
634 return; 636 return;
635 LoadSource source; 637 LoadSource source;
636 if (network_accessed_for_script_) { 638 if (network_accessed_for_script_) {
637 DCHECK(!inflight_start_task_->is_installed()); 639 DCHECK(!inflight_start_task_->is_installed());
638 source = LoadSource::NETWORK; 640 source = LoadSource::NETWORK;
639 } else if (inflight_start_task_->is_installed()) { 641 } else if (inflight_start_task_->is_installed()) {
640 source = LoadSource::SERVICE_WORKER_STORAGE; 642 source = LoadSource::SERVICE_WORKER_STORAGE;
641 } else { 643 } else {
642 source = LoadSource::HTTP_CACHE; 644 source = LoadSource::HTTP_CACHE;
643 } 645 }
644 TRACE_EVENT_ASYNC_STEP_PAST1( 646 TRACE_EVENT_NESTABLE_ASYNC_INSTANT2(
645 "ServiceWorker", "EmbeddedWorkerInstance::Start", 647 "ServiceWorker", "EmbeddedWorkerInstance::Start", this, "Step",
646 inflight_start_task_.get(), "OnScriptLoaded", "Source", 648 "OnScriptLoaded", "Source",
647 ServiceWorkerMetrics::LoadSourceToString(source)); 649 ServiceWorkerMetrics::LoadSourceToString(source));
648 650
649 if (!step_time_.is_null()) { 651 if (!step_time_.is_null()) {
650 base::TimeDelta duration = UpdateStepTime(); 652 base::TimeDelta duration = UpdateStepTime();
651 ServiceWorkerMetrics::RecordTimeToLoad(duration, source, start_situation_); 653 ServiceWorkerMetrics::RecordTimeToLoad(duration, source, start_situation_);
652 } 654 }
653 655
654 starting_phase_ = SCRIPT_LOADED; 656 starting_phase_ = SCRIPT_LOADED;
655 for (auto& observer : listener_list_) 657 for (auto& observer : listener_list_)
656 observer.OnScriptLoaded(); 658 observer.OnScriptLoaded();
657 // |this| may be destroyed by the callback. 659 // |this| may be destroyed by the callback.
658 } 660 }
659 661
660 void EmbeddedWorkerInstance::OnURLJobCreatedForMainScript() { 662 void EmbeddedWorkerInstance::OnURLJobCreatedForMainScript() {
661 if (!inflight_start_task_) 663 if (!inflight_start_task_)
662 return; 664 return;
663 TRACE_EVENT_ASYNC_STEP_PAST0("ServiceWorker", "EmbeddedWorkerInstance::Start", 665 TRACE_EVENT_NESTABLE_ASYNC_INSTANT1("ServiceWorker",
664 inflight_start_task_.get(), "OnURLJobCreated"); 666 "EmbeddedWorkerInstance::Start", this,
667 "Step", "OnURLJobCreated");
668
665 if (!step_time_.is_null()) { 669 if (!step_time_.is_null()) {
666 base::TimeDelta duration = UpdateStepTime(); 670 base::TimeDelta duration = UpdateStepTime();
667 if (inflight_start_task_->is_installed()) 671 if (inflight_start_task_->is_installed())
668 ServiceWorkerMetrics::RecordTimeToURLJob(duration, start_situation_); 672 ServiceWorkerMetrics::RecordTimeToURLJob(duration, start_situation_);
669 } 673 }
670 } 674 }
671 675
672 void EmbeddedWorkerInstance::OnWorkerVersionInstalled() { 676 void EmbeddedWorkerInstance::OnWorkerVersionInstalled() {
673 if (devtools_proxy_) 677 if (devtools_proxy_)
674 devtools_proxy_->NotifyWorkerVersionInstalled(); 678 devtools_proxy_->NotifyWorkerVersionInstalled();
675 } 679 }
676 680
677 void EmbeddedWorkerInstance::OnWorkerVersionDoomed() { 681 void EmbeddedWorkerInstance::OnWorkerVersionDoomed() {
678 if (devtools_proxy_) 682 if (devtools_proxy_)
679 devtools_proxy_->NotifyWorkerVersionDoomed(); 683 devtools_proxy_->NotifyWorkerVersionDoomed();
680 } 684 }
681 685
682 void EmbeddedWorkerInstance::OnThreadStarted(int thread_id, int provider_id) { 686 void EmbeddedWorkerInstance::OnThreadStarted(int thread_id, int provider_id) {
683 TRACE_EVENT0("ServiceWorker", "EmbeddedWorkerInstance::OnThreadStarted"); 687 if (!inflight_start_task_)
688 return;
689 TRACE_EVENT_NESTABLE_ASYNC_INSTANT1("ServiceWorker",
690 "EmbeddedWorkerInstance::Start", this,
691 "Step", "OnThreadStarted");
692
684 if (!context_) 693 if (!context_)
685 return; 694 return;
686 695
687 ServiceWorkerProviderHost* provider_host = 696 ServiceWorkerProviderHost* provider_host =
688 context_->GetProviderHost(process_id(), provider_id); 697 context_->GetProviderHost(process_id(), provider_id);
689 if (!provider_host) { 698 if (!provider_host) {
690 bad_message::ReceivedBadMessage( 699 bad_message::ReceivedBadMessage(
691 process_id(), bad_message::SWDH_WORKER_SCRIPT_LOAD_NO_HOST); 700 process_id(), bad_message::SWDH_WORKER_SCRIPT_LOAD_NO_HOST);
692 return; 701 return;
693 } 702 }
694 703
695 provider_host->SetReadyToSendMessagesToWorker(thread_id); 704 provider_host->SetReadyToSendMessagesToWorker(thread_id);
696 705
697 if (!inflight_start_task_)
698 return;
699 TRACE_EVENT_ASYNC_STEP_PAST0("ServiceWorker", "EmbeddedWorkerInstance::Start",
700 inflight_start_task_.get(), "OnThreadStarted");
701
702 starting_phase_ = THREAD_STARTED; 706 starting_phase_ = THREAD_STARTED;
703 if (!step_time_.is_null()) { 707 if (!step_time_.is_null()) {
704 base::TimeDelta duration = UpdateStepTime(); 708 base::TimeDelta duration = UpdateStepTime();
705 if (inflight_start_task_->is_installed()) 709 if (inflight_start_task_->is_installed())
706 ServiceWorkerMetrics::RecordTimeToStartThread(duration, start_situation_); 710 ServiceWorkerMetrics::RecordTimeToStartThread(duration, start_situation_);
707 } 711 }
708 712
709 thread_id_ = thread_id; 713 thread_id_ = thread_id;
710 for (auto& observer : listener_list_) 714 for (auto& observer : listener_list_)
711 observer.OnThreadStarted(); 715 observer.OnThreadStarted();
712 } 716 }
713 717
714 void EmbeddedWorkerInstance::OnScriptLoadFailed() { 718 void EmbeddedWorkerInstance::OnScriptLoadFailed() {
715 TRACE_EVENT0("ServiceWorker", "EmbeddedWorkerInstance::OnScriptLoadFailed");
716 if (!inflight_start_task_) 719 if (!inflight_start_task_)
717 return; 720 return;
718 TRACE_EVENT_ASYNC_STEP_PAST0("ServiceWorker", "EmbeddedWorkerInstance::Start", 721 TRACE_EVENT_NESTABLE_ASYNC_INSTANT1("ServiceWorker",
719 inflight_start_task_.get(), 722 "EmbeddedWorkerInstance::Start", this,
720 "OnScriptLoadFailed"); 723 "Step", "OnScriptLoadFailed");
724
721 for (auto& observer : listener_list_) 725 for (auto& observer : listener_list_)
722 observer.OnScriptLoadFailed(); 726 observer.OnScriptLoadFailed();
723 } 727 }
724 728
725 void EmbeddedWorkerInstance::OnScriptEvaluated(bool success) { 729 void EmbeddedWorkerInstance::OnScriptEvaluated(bool success) {
726 TRACE_EVENT0("ServiceWorker", "EmbeddedWorkerInstance::OnScriptEvaluated");
727 if (!inflight_start_task_) 730 if (!inflight_start_task_)
728 return; 731 return;
732 TRACE_EVENT_NESTABLE_ASYNC_INSTANT2(
733 "ServiceWorker", "EmbeddedWorkerInstance::Start", this, "Step",
734 "OnScriptEvaluated", "Success", success);
735
729 DCHECK_EQ(EmbeddedWorkerStatus::STARTING, status_); 736 DCHECK_EQ(EmbeddedWorkerStatus::STARTING, status_);
730 737
731 TRACE_EVENT_ASYNC_STEP_PAST1("ServiceWorker", "EmbeddedWorkerInstance::Start",
732 inflight_start_task_.get(), "OnScriptEvaluated",
733 "Success", success);
734 starting_phase_ = SCRIPT_EVALUATED; 738 starting_phase_ = SCRIPT_EVALUATED;
735 if (!step_time_.is_null()) { 739 if (!step_time_.is_null()) {
736 base::TimeDelta duration = UpdateStepTime(); 740 base::TimeDelta duration = UpdateStepTime();
737 if (success && inflight_start_task_->is_installed()) 741 if (success && inflight_start_task_->is_installed())
738 ServiceWorkerMetrics::RecordTimeToEvaluateScript(duration, 742 ServiceWorkerMetrics::RecordTimeToEvaluateScript(duration,
739 start_situation_); 743 start_situation_);
740 } 744 }
741 745
742 base::WeakPtr<EmbeddedWorkerInstance> weak_this = weak_factory_.GetWeakPtr(); 746 base::WeakPtr<EmbeddedWorkerInstance> weak_this = weak_factory_.GetWeakPtr();
743 StartTask::RunStartCallback( 747 StartTask::RunStartCallback(
744 inflight_start_task_.get(), 748 inflight_start_task_.get(),
745 success ? SERVICE_WORKER_OK 749 success ? SERVICE_WORKER_OK
746 : SERVICE_WORKER_ERROR_SCRIPT_EVALUATE_FAILED); 750 : SERVICE_WORKER_ERROR_SCRIPT_EVALUATE_FAILED);
747 // |this| may be destroyed by the callback. 751 // |this| may be destroyed by the callback.
748 } 752 }
749 753
750 void EmbeddedWorkerInstance::OnStarted() { 754 void EmbeddedWorkerInstance::OnStarted() {
751 TRACE_EVENT0("ServiceWorker", "EmbeddedWorkerInstance::OnStarted");
752 if (!registry_->OnWorkerStarted(process_id(), embedded_worker_id_)) 755 if (!registry_->OnWorkerStarted(process_id(), embedded_worker_id_))
753 return; 756 return;
754 // Stop is requested before OnStarted is sent back from the worker. 757 // Stop is requested before OnStarted is sent back from the worker.
755 if (status_ == EmbeddedWorkerStatus::STOPPING) 758 if (status_ == EmbeddedWorkerStatus::STOPPING)
756 return; 759 return;
760 TRACE_EVENT_NESTABLE_ASYNC_INSTANT1("ServiceWorker",
761 "EmbeddedWorkerInstance::Start", this,
762 "Step", "OnStarted");
763
757 DCHECK(status_ == EmbeddedWorkerStatus::STARTING); 764 DCHECK(status_ == EmbeddedWorkerStatus::STARTING);
758 status_ = EmbeddedWorkerStatus::RUNNING; 765 status_ = EmbeddedWorkerStatus::RUNNING;
759 inflight_start_task_.reset(); 766 inflight_start_task_.reset();
760 for (auto& observer : listener_list_) 767 for (auto& observer : listener_list_)
761 observer.OnStarted(); 768 observer.OnStarted();
762 } 769 }
763 770
764 void EmbeddedWorkerInstance::OnStopped() { 771 void EmbeddedWorkerInstance::OnStopped() {
765 registry_->OnWorkerStopped(process_id(), embedded_worker_id_); 772 registry_->OnWorkerStopped(process_id(), embedded_worker_id_);
766 773
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after
937 case SCRIPT_READ_FINISHED: 944 case SCRIPT_READ_FINISHED:
938 return "Script read finished"; 945 return "Script read finished";
939 case STARTING_PHASE_MAX_VALUE: 946 case STARTING_PHASE_MAX_VALUE:
940 NOTREACHED(); 947 NOTREACHED();
941 } 948 }
942 NOTREACHED() << phase; 949 NOTREACHED() << phase;
943 return std::string(); 950 return std::string();
944 } 951 }
945 952
946 } // namespace content 953 } // namespace content
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698