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

Side by Side Diff: content/renderer/render_thread_impl.cc

Issue 2402983002: [TimeZoneMonitor] Decouple renderer side impl from content to blink. (Closed)
Patch Set: Rebase only Created 4 years, 2 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
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/renderer/render_thread_impl.h" 5 #include "content/renderer/render_thread_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <limits> 8 #include <limits>
9 #include <map> 9 #include <map>
10 #include <utility> 10 #include <utility>
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
153 #include "third_party/WebKit/public/web/WebCache.h" 153 #include "third_party/WebKit/public/web/WebCache.h"
154 #include "third_party/WebKit/public/web/WebDatabase.h" 154 #include "third_party/WebKit/public/web/WebDatabase.h"
155 #include "third_party/WebKit/public/web/WebDocument.h" 155 #include "third_party/WebKit/public/web/WebDocument.h"
156 #include "third_party/WebKit/public/web/WebFrame.h" 156 #include "third_party/WebKit/public/web/WebFrame.h"
157 #include "third_party/WebKit/public/web/WebKit.h" 157 #include "third_party/WebKit/public/web/WebKit.h"
158 #include "third_party/WebKit/public/web/WebNetworkStateNotifier.h" 158 #include "third_party/WebKit/public/web/WebNetworkStateNotifier.h"
159 #include "third_party/WebKit/public/web/WebRuntimeFeatures.h" 159 #include "third_party/WebKit/public/web/WebRuntimeFeatures.h"
160 #include "third_party/WebKit/public/web/WebScriptController.h" 160 #include "third_party/WebKit/public/web/WebScriptController.h"
161 #include "third_party/WebKit/public/web/WebSecurityPolicy.h" 161 #include "third_party/WebKit/public/web/WebSecurityPolicy.h"
162 #include "third_party/WebKit/public/web/WebView.h" 162 #include "third_party/WebKit/public/web/WebView.h"
163 #include "third_party/icu/source/i18n/unicode/timezone.h"
164 #include "third_party/skia/include/core/SkGraphics.h" 163 #include "third_party/skia/include/core/SkGraphics.h"
165 #include "ui/base/layout.h" 164 #include "ui/base/layout.h"
166 #include "ui/base/ui_base_switches.h" 165 #include "ui/base/ui_base_switches.h"
167 #include "ui/gl/gl_switches.h" 166 #include "ui/gl/gl_switches.h"
168 167
169 #if defined(OS_ANDROID) 168 #if defined(OS_ANDROID)
170 #include <cpu-features.h> 169 #include <cpu-features.h>
171 #include "content/renderer/android/synchronous_compositor_filter.h" 170 #include "content/renderer/android/synchronous_compositor_filter.h"
172 #include "content/renderer/android/synchronous_compositor_frame_sink.h" 171 #include "content/renderer/android/synchronous_compositor_frame_sink.h"
173 #include "content/renderer/media/android/stream_texture_factory.h" 172 #include "content/renderer/media/android/stream_texture_factory.h"
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
317 histogram_name, min, max, buckets, 316 histogram_name, min, max, buckets,
318 base::Histogram::kUmaTargetedHistogramFlag); 317 base::Histogram::kUmaTargetedHistogramFlag);
319 return histogram; 318 return histogram;
320 } 319 }
321 320
322 void AddHistogramSample(void* hist, int sample) { 321 void AddHistogramSample(void* hist, int sample) {
323 base::Histogram* histogram = static_cast<base::Histogram*>(hist); 322 base::Histogram* histogram = static_cast<base::Histogram*>(hist);
324 histogram->Add(sample); 323 histogram->Add(sample);
325 } 324 }
326 325
327 void NotifyTimezoneChangeOnThisThread() {
328 v8::Isolate* isolate = v8::Isolate::GetCurrent();
329 if (!isolate)
330 return;
331 v8::Date::DateTimeConfigurationChangeNotification(isolate);
332 }
333
334 class FrameFactoryImpl : public mojom::FrameFactory { 326 class FrameFactoryImpl : public mojom::FrameFactory {
335 public: 327 public:
336 FrameFactoryImpl() : routing_id_highmark_(-1) {} 328 FrameFactoryImpl() : routing_id_highmark_(-1) {}
337 329
338 private: 330 private:
339 // mojom::FrameFactory: 331 // mojom::FrameFactory:
340 void CreateFrame(int32_t frame_routing_id, 332 void CreateFrame(int32_t frame_routing_id,
341 mojom::FrameRequest frame_request, 333 mojom::FrameRequest frame_request,
342 mojom::FrameHostPtr frame_host) override { 334 mojom::FrameHostPtr frame_host) override {
343 // TODO(morrita): This is for investigating http://crbug.com/415059 and 335 // TODO(morrita): This is for investigating http://crbug.com/415059 and
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after
597 RenderThreadImpl::RenderThreadImpl( 589 RenderThreadImpl::RenderThreadImpl(
598 const InProcessChildThreadParams& params, 590 const InProcessChildThreadParams& params,
599 std::unique_ptr<blink::scheduler::RendererScheduler> scheduler, 591 std::unique_ptr<blink::scheduler::RendererScheduler> scheduler,
600 scoped_refptr<base::SingleThreadTaskRunner>& resource_task_queue) 592 scoped_refptr<base::SingleThreadTaskRunner>& resource_task_queue)
601 : ChildThreadImpl(Options::Builder() 593 : ChildThreadImpl(Options::Builder()
602 .InBrowserProcess(params) 594 .InBrowserProcess(params)
603 .AutoStartServiceManagerConnection(false) 595 .AutoStartServiceManagerConnection(false)
604 .ConnectToBrowser(true) 596 .ConnectToBrowser(true)
605 .Build()), 597 .Build()),
606 renderer_scheduler_(std::move(scheduler)), 598 renderer_scheduler_(std::move(scheduler)),
607 time_zone_monitor_binding_(this),
608 categorized_worker_pool_(new CategorizedWorkerPool()), 599 categorized_worker_pool_(new CategorizedWorkerPool()),
609 renderer_binding_(this) { 600 renderer_binding_(this) {
610 Init(resource_task_queue); 601 Init(resource_task_queue);
611 } 602 }
612 603
613 // When we run plugins in process, we actually run them on the render thread, 604 // When we run plugins in process, we actually run them on the render thread,
614 // which means that we need to make the render thread pump UI events. 605 // which means that we need to make the render thread pump UI events.
615 RenderThreadImpl::RenderThreadImpl( 606 RenderThreadImpl::RenderThreadImpl(
616 std::unique_ptr<base::MessageLoop> main_message_loop, 607 std::unique_ptr<base::MessageLoop> main_message_loop,
617 std::unique_ptr<blink::scheduler::RendererScheduler> scheduler) 608 std::unique_ptr<blink::scheduler::RendererScheduler> scheduler)
618 : ChildThreadImpl(Options::Builder() 609 : ChildThreadImpl(Options::Builder()
619 .AutoStartServiceManagerConnection(false) 610 .AutoStartServiceManagerConnection(false)
620 .ConnectToBrowser(true) 611 .ConnectToBrowser(true)
621 .Build()), 612 .Build()),
622 renderer_scheduler_(std::move(scheduler)), 613 renderer_scheduler_(std::move(scheduler)),
623 time_zone_monitor_binding_(this),
624 main_message_loop_(std::move(main_message_loop)), 614 main_message_loop_(std::move(main_message_loop)),
625 categorized_worker_pool_(new CategorizedWorkerPool()), 615 categorized_worker_pool_(new CategorizedWorkerPool()),
626 renderer_binding_(this) { 616 renderer_binding_(this) {
627 scoped_refptr<base::SingleThreadTaskRunner> test_task_counter; 617 scoped_refptr<base::SingleThreadTaskRunner> test_task_counter;
628 Init(test_task_counter); 618 Init(test_task_counter);
629 } 619 }
630 620
631 void RenderThreadImpl::Init( 621 void RenderThreadImpl::Init(
632 scoped_refptr<base::SingleThreadTaskRunner>& resource_task_queue) { 622 scoped_refptr<base::SingleThreadTaskRunner>& resource_task_queue) {
633 TRACE_EVENT0("startup", "RenderThreadImpl::Init"); 623 TRACE_EVENT0("startup", "RenderThreadImpl::Init");
(...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after
876 866
877 GetInterfaceRegistry()->AddInterface(base::Bind(&CreateFrameFactory)); 867 GetInterfaceRegistry()->AddInterface(base::Bind(&CreateFrameFactory));
878 GetInterfaceRegistry()->AddInterface(base::Bind(&CreateEmbeddedWorkerSetup)); 868 GetInterfaceRegistry()->AddInterface(base::Bind(&CreateEmbeddedWorkerSetup));
879 GetInterfaceRegistry()->AddInterface( 869 GetInterfaceRegistry()->AddInterface(
880 base::Bind(&EmbeddedWorkerInstanceClientImpl::Create, 870 base::Bind(&EmbeddedWorkerInstanceClientImpl::Create,
881 base::Unretained(embedded_worker_dispatcher_.get()))); 871 base::Unretained(embedded_worker_dispatcher_.get())));
882 872
883 GetRemoteInterfaces()->GetInterface( 873 GetRemoteInterfaces()->GetInterface(
884 mojo::GetProxy(&storage_partition_service_)); 874 mojo::GetProxy(&storage_partition_service_));
885 875
886 device::mojom::TimeZoneMonitorPtr time_zone_monitor;
887 GetRemoteInterfaces()->GetInterface(mojo::GetProxy(&time_zone_monitor));
888 time_zone_monitor->AddClient(
889 time_zone_monitor_binding_.CreateInterfacePtrAndBind());
890
891 #if defined(OS_LINUX) 876 #if defined(OS_LINUX)
892 ChildProcess::current()->SetIOThreadPriority(base::ThreadPriority::DISPLAY); 877 ChildProcess::current()->SetIOThreadPriority(base::ThreadPriority::DISPLAY);
893 ChildThreadImpl::current()->SetThreadPriority( 878 ChildThreadImpl::current()->SetThreadPriority(
894 categorized_worker_pool_->background_worker_thread_id(), 879 categorized_worker_pool_->background_worker_thread_id(),
895 base::ThreadPriority::BACKGROUND); 880 base::ThreadPriority::BACKGROUND);
896 #endif 881 #endif
897 882
898 is_renderer_suspended_ = false; 883 is_renderer_suspended_ = false;
899 } 884 }
900 885
(...skipping 428 matching lines...) Expand 10 before | Expand all | Expand 10 after
1329 1314
1330 // chrome-devtools: 1315 // chrome-devtools:
1331 WebString devtools_scheme(base::ASCIIToUTF16(kChromeDevToolsScheme)); 1316 WebString devtools_scheme(base::ASCIIToUTF16(kChromeDevToolsScheme));
1332 WebSecurityPolicy::registerURLSchemeAsDisplayIsolated(devtools_scheme); 1317 WebSecurityPolicy::registerURLSchemeAsDisplayIsolated(devtools_scheme);
1333 1318
1334 // view-source: 1319 // view-source:
1335 WebString view_source_scheme(base::ASCIIToUTF16(kViewSourceScheme)); 1320 WebString view_source_scheme(base::ASCIIToUTF16(kViewSourceScheme));
1336 WebSecurityPolicy::registerURLSchemeAsDisplayIsolated(view_source_scheme); 1321 WebSecurityPolicy::registerURLSchemeAsDisplayIsolated(view_source_scheme);
1337 } 1322 }
1338 1323
1339 void RenderThreadImpl::NotifyTimezoneChange() {
1340 NotifyTimezoneChangeOnThisThread();
1341 RenderThread::Get()->PostTaskToAllWebWorkers(
1342 base::Bind(&NotifyTimezoneChangeOnThisThread));
1343 }
1344
1345 void RenderThreadImpl::RecordAction(const base::UserMetricsAction& action) { 1324 void RenderThreadImpl::RecordAction(const base::UserMetricsAction& action) {
1346 Send(new ViewHostMsg_UserMetricsRecordAction(action.str_)); 1325 Send(new ViewHostMsg_UserMetricsRecordAction(action.str_));
1347 } 1326 }
1348 1327
1349 void RenderThreadImpl::RecordComputedAction(const std::string& action) { 1328 void RenderThreadImpl::RecordComputedAction(const std::string& action) {
1350 Send(new ViewHostMsg_UserMetricsRecordAction(action)); 1329 Send(new ViewHostMsg_UserMetricsRecordAction(action));
1351 } 1330 }
1352 1331
1353 std::unique_ptr<base::SharedMemory> 1332 std::unique_ptr<base::SharedMemory>
1354 RenderThreadImpl::HostAllocateSharedMemoryBuffer(size_t size) { 1333 RenderThreadImpl::HostAllocateSharedMemoryBuffer(size_t size) {
(...skipping 713 matching lines...) Expand 10 before | Expand all | Expand 10 after
2068 base::IntToString(render_view_routing_id)); 2047 base::IntToString(render_view_routing_id));
2069 base::debug::SetCrashKeyValue("newproxy_opener_id", 2048 base::debug::SetCrashKeyValue("newproxy_opener_id",
2070 base::IntToString(opener_routing_id)); 2049 base::IntToString(opener_routing_id));
2071 base::debug::SetCrashKeyValue("newproxy_parent_id", 2050 base::debug::SetCrashKeyValue("newproxy_parent_id",
2072 base::IntToString(parent_routing_id)); 2051 base::IntToString(parent_routing_id));
2073 RenderFrameProxy::CreateFrameProxy(routing_id, render_view_routing_id, 2052 RenderFrameProxy::CreateFrameProxy(routing_id, render_view_routing_id,
2074 opener_routing_id, parent_routing_id, 2053 opener_routing_id, parent_routing_id,
2075 replicated_state); 2054 replicated_state);
2076 } 2055 }
2077 2056
2078 void RenderThreadImpl::OnTimeZoneChange(const std::string& zone_id) {
2079 if (!blink_platform_impl_)
2080 return;
2081 if (!zone_id.empty()) {
2082 icu::TimeZone *new_zone = icu::TimeZone::createTimeZone(
2083 icu::UnicodeString::fromUTF8(zone_id));
2084 icu::TimeZone::adoptDefault(new_zone);
2085 VLOG(1) << "ICU default timezone is set to " << zone_id;
2086 }
2087 NotifyTimezoneChange();
2088 }
2089
2090 #if defined(OS_ANDROID) 2057 #if defined(OS_ANDROID)
2091 void RenderThreadImpl::OnSetWebKitSharedTimersSuspended(bool suspend) { 2058 void RenderThreadImpl::OnSetWebKitSharedTimersSuspended(bool suspend) {
2092 if (suspend) { 2059 if (suspend) {
2093 renderer_scheduler_->SuspendTimerQueue(); 2060 renderer_scheduler_->SuspendTimerQueue();
2094 } else { 2061 } else {
2095 renderer_scheduler_->ResumeTimerQueue(); 2062 renderer_scheduler_->ResumeTimerQueue();
2096 } 2063 }
2097 webkit_shared_timer_suspended_ = suspend; 2064 webkit_shared_timer_suspended_ = suspend;
2098 } 2065 }
2099 #endif 2066 #endif
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after
2329 } 2296 }
2330 } 2297 }
2331 2298
2332 void RenderThreadImpl::OnRendererInterfaceRequest( 2299 void RenderThreadImpl::OnRendererInterfaceRequest(
2333 mojom::RendererAssociatedRequest request) { 2300 mojom::RendererAssociatedRequest request) {
2334 DCHECK(!renderer_binding_.is_bound()); 2301 DCHECK(!renderer_binding_.is_bound());
2335 renderer_binding_.Bind(std::move(request)); 2302 renderer_binding_.Bind(std::move(request));
2336 } 2303 }
2337 2304
2338 } // namespace content 2305 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698