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

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

Issue 15650016: [Not for review] Discardable memory emulation (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 7 years, 6 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 | Annotate | Revision Log
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 <vector> 10 #include <vector>
11 11
12 #include "base/allocator/allocator_extension.h" 12 #include "base/allocator/allocator_extension.h"
13 #include "base/command_line.h" 13 #include "base/command_line.h"
14 #include "base/debug/trace_event.h" 14 #include "base/debug/trace_event.h"
15 #include "base/lazy_instance.h" 15 #include "base/lazy_instance.h"
16 #include "base/logging.h" 16 #include "base/logging.h"
17 #include "base/memory/discardable_memory.h"
17 #include "base/metrics/field_trial.h" 18 #include "base/metrics/field_trial.h"
18 #include "base/metrics/histogram.h" 19 #include "base/metrics/histogram.h"
19 #include "base/metrics/stats_table.h" 20 #include "base/metrics/stats_table.h"
20 #include "base/path_service.h" 21 #include "base/path_service.h"
21 #include "base/shared_memory.h" 22 #include "base/shared_memory.h"
22 #include "base/string16.h" 23 #include "base/string16.h"
23 #include "base/string_number_conversions.h" // Temporary 24 #include "base/string_number_conversions.h" // Temporary
24 #include "base/threading/thread_local.h" 25 #include "base/threading/thread_local.h"
25 #include "base/threading/thread_restrictions.h" 26 #include "base/threading/thread_restrictions.h"
26 #include "base/utf_string_conversions.h" 27 #include "base/utf_string_conversions.h"
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
61 #include "content/renderer/media/audio_message_filter.h" 62 #include "content/renderer/media/audio_message_filter.h"
62 #include "content/renderer/media/audio_renderer_mixer_manager.h" 63 #include "content/renderer/media/audio_renderer_mixer_manager.h"
63 #include "content/renderer/media/media_stream_center.h" 64 #include "content/renderer/media/media_stream_center.h"
64 #include "content/renderer/media/media_stream_dependency_factory.h" 65 #include "content/renderer/media/media_stream_dependency_factory.h"
65 #include "content/renderer/media/peer_connection_tracker.h" 66 #include "content/renderer/media/peer_connection_tracker.h"
66 #include "content/renderer/media/video_capture_impl_manager.h" 67 #include "content/renderer/media/video_capture_impl_manager.h"
67 #include "content/renderer/media/video_capture_message_filter.h" 68 #include "content/renderer/media/video_capture_message_filter.h"
68 #include "content/renderer/memory_benchmarking_extension.h" 69 #include "content/renderer/memory_benchmarking_extension.h"
69 #include "content/renderer/p2p/socket_dispatcher.h" 70 #include "content/renderer/p2p/socket_dispatcher.h"
70 #include "content/renderer/plugin_channel_host.h" 71 #include "content/renderer/plugin_channel_host.h"
72 #include "content/renderer/render_process_discardable_memory_provider.h"
71 #include "content/renderer/render_process_impl.h" 73 #include "content/renderer/render_process_impl.h"
74 #include "content/renderer/render_process_visibility_manager.h"
72 #include "content/renderer/render_view_impl.h" 75 #include "content/renderer/render_view_impl.h"
73 #include "content/renderer/renderer_webkitplatformsupport_impl.h" 76 #include "content/renderer/renderer_webkitplatformsupport_impl.h"
74 #include "content/renderer/skia_benchmarking_extension.h" 77 #include "content/renderer/skia_benchmarking_extension.h"
75 #include "grit/content_resources.h" 78 #include "grit/content_resources.h"
76 #include "ipc/ipc_channel_handle.h" 79 #include "ipc/ipc_channel_handle.h"
77 #include "ipc/ipc_forwarding_message_filter.h" 80 #include "ipc/ipc_forwarding_message_filter.h"
78 #include "ipc/ipc_platform_file.h" 81 #include "ipc/ipc_platform_file.h"
79 #include "media/base/audio_hardware_config.h" 82 #include "media/base/audio_hardware_config.h"
80 #include "media/base/media.h" 83 #include "media/base/media.h"
81 #include "net/base/net_errors.h" 84 #include "net/base/net_errors.h"
(...skipping 311 matching lines...) Expand 10 before | Expand all | Expand 10 after
393 396
394 const CommandLine& command_line = *CommandLine::ForCurrentProcess(); 397 const CommandLine& command_line = *CommandLine::ForCurrentProcess();
395 if (command_line.HasSwitch(switches::kEnableGpuBenchmarking)) 398 if (command_line.HasSwitch(switches::kEnableGpuBenchmarking))
396 RegisterExtension(GpuBenchmarkingExtension::Get()); 399 RegisterExtension(GpuBenchmarkingExtension::Get());
397 400
398 #if defined(USE_TCMALLOC) && (defined(OS_LINUX) || defined(OS_ANDROID)) 401 #if defined(USE_TCMALLOC) && (defined(OS_LINUX) || defined(OS_ANDROID))
399 if (command_line.HasSwitch(switches::kEnableMemoryBenchmarking)) 402 if (command_line.HasSwitch(switches::kEnableMemoryBenchmarking))
400 RegisterExtension(MemoryBenchmarkingExtension::Get()); 403 RegisterExtension(MemoryBenchmarkingExtension::Get());
401 #endif // USE_TCMALLOC 404 #endif // USE_TCMALLOC
402 405
406 if (!base::DiscardableMemoryProvider::GetInstance()) {
Avi (use Gerrit) 2013/06/07 14:46:53 DISCARDABLE_MEMORY_SUPPORTED_NATIVELY? But only i
407 discardable_provider_.reset(new RenderProcessDiscardableMemoryProvider);
408 RenderProcessVisibilityManager::GetInstance()->AddObserver(
409 discardable_provider_.get());
410 base::DiscardableMemoryProvider::SetInstance(discardable_provider_.get());
411 }
412
403 if (command_line.HasSwitch(switches::kEnableSkiaBenchmarking)) { 413 if (command_line.HasSwitch(switches::kEnableSkiaBenchmarking)) {
404 LOG(WARNING) << "Enabling unsafe Skia benchmarking extension."; 414 LOG(WARNING) << "Enabling unsafe Skia benchmarking extension.";
405 RegisterExtension(SkiaBenchmarkingExtension::Get()); 415 RegisterExtension(SkiaBenchmarkingExtension::Get());
406 } 416 }
407 417
408 context_lost_cb_.reset(new GpuVDAContextLostCallback()); 418 context_lost_cb_.reset(new GpuVDAContextLostCallback());
409 419
410 // Note that under Linux, the media library will normally already have 420 // Note that under Linux, the media library will normally already have
411 // been initialized by the Zygote before this instance became a Renderer. 421 // been initialized by the Zygote before this instance became a Renderer.
412 base::FilePath media_path; 422 base::FilePath media_path;
413 PathService::Get(DIR_MEDIA_LIBS, &media_path); 423 PathService::Get(DIR_MEDIA_LIBS, &media_path);
414 if (!media_path.empty()) 424 if (!media_path.empty())
415 media::InitializeMediaLibrary(media_path); 425 media::InitializeMediaLibrary(media_path);
416 426
417 TRACE_EVENT_END_ETW("RenderThreadImpl::Init", 0, ""); 427 TRACE_EVENT_END_ETW("RenderThreadImpl::Init", 0, "");
418 } 428 }
419 429
420 RenderThreadImpl::~RenderThreadImpl() { 430 RenderThreadImpl::~RenderThreadImpl() {
431 if (discardable_provider_)
432 base::DiscardableMemoryProvider::SetInstance(NULL);
421 } 433 }
422 434
423 void RenderThreadImpl::Shutdown() { 435 void RenderThreadImpl::Shutdown() {
424 FOR_EACH_OBSERVER( 436 FOR_EACH_OBSERVER(
425 RenderProcessObserver, observers_, OnRenderProcessShutdown()); 437 RenderProcessObserver, observers_, OnRenderProcessShutdown());
426 438
427 // Wait for all databases to be closed. 439 // Wait for all databases to be closed.
428 if (web_database_observer_impl_) 440 if (web_database_observer_impl_)
429 web_database_observer_impl_->WaitForAllDatabasesToClose(); 441 web_database_observer_impl_->WaitForAllDatabasesToClose();
430 442
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after
610 622
611 void RenderThreadImpl::SetResourceDispatcherDelegate( 623 void RenderThreadImpl::SetResourceDispatcherDelegate(
612 ResourceDispatcherDelegate* delegate) { 624 ResourceDispatcherDelegate* delegate) {
613 resource_dispatcher()->set_delegate(delegate); 625 resource_dispatcher()->set_delegate(delegate);
614 } 626 }
615 627
616 void RenderThreadImpl::WidgetHidden() { 628 void RenderThreadImpl::WidgetHidden() {
617 DCHECK(hidden_widget_count_ < widget_count_); 629 DCHECK(hidden_widget_count_ < widget_count_);
618 hidden_widget_count_++; 630 hidden_widget_count_++;
619 631
632 if (discardable_provider_) {
633 RenderProcessVisibilityManager* manager =
634 RenderProcessVisibilityManager::GetInstance();
635 manager->WidgetVisibilityChanged(false);
636 }
637
620 if (!GetContentClient()->renderer()->RunIdleHandlerWhenWidgetsHidden()) { 638 if (!GetContentClient()->renderer()->RunIdleHandlerWhenWidgetsHidden()) {
621 return; 639 return;
622 } 640 }
623 641
624 if (widget_count_ && hidden_widget_count_ == widget_count_) 642 if (widget_count_ && hidden_widget_count_ == widget_count_)
625 ScheduleIdleHandler(kInitialIdleHandlerDelayMs); 643 ScheduleIdleHandler(kInitialIdleHandlerDelayMs);
626 } 644 }
627 645
628 void RenderThreadImpl::WidgetRestored() { 646 void RenderThreadImpl::WidgetRestored() {
629 DCHECK_GT(hidden_widget_count_, 0); 647 DCHECK_GT(hidden_widget_count_, 0);
630 hidden_widget_count_--; 648 hidden_widget_count_--;
649
650 if (discardable_provider_) {
651 RenderProcessVisibilityManager* manager =
652 RenderProcessVisibilityManager::GetInstance();
653 manager->WidgetVisibilityChanged(true);
654 }
655
631 if (!GetContentClient()->renderer()->RunIdleHandlerWhenWidgetsHidden()) { 656 if (!GetContentClient()->renderer()->RunIdleHandlerWhenWidgetsHidden()) {
632 return; 657 return;
633 } 658 }
634 659
635 ScheduleIdleHandler(kLongIdleHandlerDelayMs); 660 ScheduleIdleHandler(kLongIdleHandlerDelayMs);
636 } 661 }
637 662
638 static void AdjustRuntimeFeatureDefaultsForPlatform() { 663 static void AdjustRuntimeFeatureDefaultsForPlatform() {
639 #if defined(OS_ANDROID) && !defined(GOOGLE_TV) 664 #if defined(OS_ANDROID) && !defined(GOOGLE_TV)
640 WebRuntimeFeatures::enableWebKitMediaSource(false); 665 WebRuntimeFeatures::enableWebKitMediaSource(false);
(...skipping 691 matching lines...) Expand 10 before | Expand all | Expand 10 after
1332 1357
1333 void RenderThreadImpl::SetFlingCurveParameters( 1358 void RenderThreadImpl::SetFlingCurveParameters(
1334 const std::vector<float>& new_touchpad, 1359 const std::vector<float>& new_touchpad,
1335 const std::vector<float>& new_touchscreen) { 1360 const std::vector<float>& new_touchscreen) {
1336 webkit_platform_support_->SetFlingCurveParameters(new_touchpad, 1361 webkit_platform_support_->SetFlingCurveParameters(new_touchpad,
1337 new_touchscreen); 1362 new_touchscreen);
1338 1363
1339 } 1364 }
1340 1365
1341 } // namespace content 1366 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698