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

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

Issue 458343003: Revert of base: Introduce an explicit call for reducing emulated discardable memory usage. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 4 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/memory/discardable_memory.h"
18 #include "base/memory/discardable_memory_emulated.h"
19 #include "base/memory/shared_memory.h" 18 #include "base/memory/shared_memory.h"
20 #include "base/metrics/field_trial.h" 19 #include "base/metrics/field_trial.h"
21 #include "base/metrics/histogram.h" 20 #include "base/metrics/histogram.h"
22 #include "base/metrics/stats_table.h" 21 #include "base/metrics/stats_table.h"
23 #include "base/path_service.h" 22 #include "base/path_service.h"
24 #include "base/strings/string16.h" 23 #include "base/strings/string16.h"
25 #include "base/strings/string_number_conversions.h" 24 #include "base/strings/string_number_conversions.h"
26 #include "base/strings/string_tokenizer.h" 25 #include "base/strings/string_tokenizer.h"
27 #include "base/strings/utf_string_conversions.h" 26 #include "base/strings/utf_string_conversions.h"
28 #include "base/threading/thread_local.h" 27 #include "base/threading/thread_local.h"
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
172 const int kIdleCPUUsageThresholdInPercents = 3; 171 const int kIdleCPUUsageThresholdInPercents = 3;
173 const int kMinRasterThreads = 1; 172 const int kMinRasterThreads = 1;
174 const int kMaxRasterThreads = 64; 173 const int kMaxRasterThreads = 64;
175 174
176 // Maximum allocation size allowed for image scaling filters that 175 // Maximum allocation size allowed for image scaling filters that
177 // require pre-scaling. Skia will fallback to a filter that doesn't 176 // require pre-scaling. Skia will fallback to a filter that doesn't
178 // require pre-scaling if the default filter would require an 177 // require pre-scaling if the default filter would require an
179 // allocation that exceeds this limit. 178 // allocation that exceeds this limit.
180 const size_t kImageCacheSingleAllocationByteLimit = 64 * 1024 * 1024; 179 const size_t kImageCacheSingleAllocationByteLimit = 64 * 1024 * 1024;
181 180
182 const size_t kEmulatedDiscardableMemoryBytesToKeepWhenWidgetsHidden =
183 4 * 1024 * 1024;
184
185 // Keep the global RenderThreadImpl in a TLS slot so it is impossible to access 181 // Keep the global RenderThreadImpl in a TLS slot so it is impossible to access
186 // incorrectly from the wrong thread. 182 // incorrectly from the wrong thread.
187 base::LazyInstance<base::ThreadLocalPointer<RenderThreadImpl> > 183 base::LazyInstance<base::ThreadLocalPointer<RenderThreadImpl> >
188 lazy_tls = LAZY_INSTANCE_INITIALIZER; 184 lazy_tls = LAZY_INSTANCE_INITIALIZER;
189 185
190 class RenderViewZoomer : public RenderViewVisitor { 186 class RenderViewZoomer : public RenderViewVisitor {
191 public: 187 public:
192 RenderViewZoomer(const std::string& scheme, 188 RenderViewZoomer(const std::string& scheme,
193 const std::string& host, 189 const std::string& host,
194 double zoom_level) : scheme_(scheme), 190 double zoom_level) : scheme_(scheme),
(...skipping 336 matching lines...) Expand 10 before | Expand all | Expand 10 after
531 supported_types.end(), 527 supported_types.end(),
532 requested_type) != supported_types.end()) { 528 requested_type) != supported_types.end()) {
533 type = requested_type; 529 type = requested_type;
534 } else { 530 } else {
535 LOG(ERROR) << "Requested discardable memory type is not supported."; 531 LOG(ERROR) << "Requested discardable memory type is not supported.";
536 } 532 }
537 } 533 }
538 534
539 base::DiscardableMemory::SetPreferredType(type); 535 base::DiscardableMemory::SetPreferredType(type);
540 536
537 // Allow discardable memory implementations to register memory pressure
538 // listeners.
539 base::DiscardableMemory::RegisterMemoryPressureListeners();
540
541 // AllocateGpuMemoryBuffer must be used exclusively on one thread but 541 // AllocateGpuMemoryBuffer must be used exclusively on one thread but
542 // it doesn't have to be the same thread RenderThreadImpl is created on. 542 // it doesn't have to be the same thread RenderThreadImpl is created on.
543 allocate_gpu_memory_buffer_thread_checker_.DetachFromThread(); 543 allocate_gpu_memory_buffer_thread_checker_.DetachFromThread();
544 544
545 if (command_line.HasSwitch(switches::kNumRasterThreads)) { 545 if (command_line.HasSwitch(switches::kNumRasterThreads)) {
546 int num_raster_threads; 546 int num_raster_threads;
547 std::string string_value = 547 std::string string_value =
548 command_line.GetSwitchValueASCII(switches::kNumRasterThreads); 548 command_line.GetSwitchValueASCII(switches::kNumRasterThreads);
549 if (base::StringToInt(string_value, &num_raster_threads) && 549 if (base::StringToInt(string_value, &num_raster_threads) &&
550 num_raster_threads >= kMinRasterThreads && 550 num_raster_threads >= kMinRasterThreads &&
(...skipping 1051 matching lines...) Expand 10 before | Expand all | Expand 10 after
1602 1602
1603 void RenderThreadImpl::WidgetDestroyed() { 1603 void RenderThreadImpl::WidgetDestroyed() {
1604 widget_count_--; 1604 widget_count_--;
1605 } 1605 }
1606 1606
1607 void RenderThreadImpl::WidgetHidden() { 1607 void RenderThreadImpl::WidgetHidden() {
1608 DCHECK_LT(hidden_widget_count_, widget_count_); 1608 DCHECK_LT(hidden_widget_count_, widget_count_);
1609 hidden_widget_count_++; 1609 hidden_widget_count_++;
1610 1610
1611 if (widget_count_ && hidden_widget_count_ == widget_count_) { 1611 if (widget_count_ && hidden_widget_count_ == widget_count_) {
1612 // TODO(reveman): Remove this when we have a better mechanism to prevent
1613 // total discardable memory used by all renderers from growing too large.
1614 base::internal::DiscardableMemoryEmulated::
1615 ReduceMemoryUsageUntilWithinLimit(
1616 kEmulatedDiscardableMemoryBytesToKeepWhenWidgetsHidden);
1617
1618 if (GetContentClient()->renderer()->RunIdleHandlerWhenWidgetsHidden()) 1612 if (GetContentClient()->renderer()->RunIdleHandlerWhenWidgetsHidden())
1619 ScheduleIdleHandler(kInitialIdleHandlerDelayMs); 1613 ScheduleIdleHandler(kInitialIdleHandlerDelayMs);
1620 } 1614 }
1621 } 1615 }
1622 1616
1623 void RenderThreadImpl::WidgetRestored() { 1617 void RenderThreadImpl::WidgetRestored() {
1624 DCHECK_GT(hidden_widget_count_, 0); 1618 DCHECK_GT(hidden_widget_count_, 0);
1625 hidden_widget_count_--; 1619 hidden_widget_count_--;
1626 1620
1627 if (!GetContentClient()->renderer()->RunIdleHandlerWhenWidgetsHidden()) { 1621 if (!GetContentClient()->renderer()->RunIdleHandlerWhenWidgetsHidden()) {
1628 return; 1622 return;
1629 } 1623 }
1630 1624
1631 ScheduleIdleHandler(kLongIdleHandlerDelayMs); 1625 ScheduleIdleHandler(kLongIdleHandlerDelayMs);
1632 } 1626 }
1633 1627
1634 } // namespace content 1628 } // namespace content
OLDNEW
« no previous file with comments | « base/memory/discardable_memory_win.cc ('k') | content/renderer/render_thread_impl_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698