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

Side by Side Diff: chrome/browser/memory/tab_manager.cc

Issue 2876793005: Add UMA metrics for desktop memory pressure notifications. (Closed)
Patch Set: Created 3 years, 7 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 | « base/process/process_metrics.h ('k') | content/browser/dom_storage/dom_storage_area.cc » ('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 (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 "chrome/browser/memory/tab_manager.h" 5 #include "chrome/browser/memory/tab_manager.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <set> 10 #include <set>
(...skipping 901 matching lines...) Expand 10 before | Expand all | Expand 10 after
912 } 912 }
913 913
914 TimeTicks TabManager::NowTicks() const { 914 TimeTicks TabManager::NowTicks() const {
915 if (!test_tick_clock_) 915 if (!test_tick_clock_)
916 return TimeTicks::Now(); 916 return TimeTicks::Now();
917 917
918 return test_tick_clock_->NowTicks(); 918 return test_tick_clock_->NowTicks();
919 } 919 }
920 920
921 void TabManager::DoChildProcessDispatch() { 921 void TabManager::DoChildProcessDispatch() {
922 printf("TabManager::DoChildProcessDispatch\n");
922 // If Chrome is shutting down, do not do anything. 923 // If Chrome is shutting down, do not do anything.
923 if (g_browser_process->IsShuttingDown()) 924 if (g_browser_process->IsShuttingDown())
924 return; 925 return;
925 926
926 if (!under_memory_pressure_) 927 if (!under_memory_pressure_)
927 under_memory_pressure_ = true; 928 under_memory_pressure_ = true;
928 929
929 // If the memory pressure condition has ended then stop dispatching messages. 930 // If the memory pressure condition has ended then stop dispatching messages.
930 auto level = get_current_pressure_level_.Run(); 931 auto level = get_current_pressure_level_.Run();
931 if (level == base::MemoryPressureListener::MEMORY_PRESSURE_LEVEL_NONE) { 932 if (level == base::MemoryPressureListener::MEMORY_PRESSURE_LEVEL_NONE) {
933 printf(" ...no pressure\n");
932 under_memory_pressure_ = false; 934 under_memory_pressure_ = false;
933 notified_renderers_.clear(); 935 notified_renderers_.clear();
934 return; 936 return;
935 } 937 }
936 938
937 // Get a vector of active renderers, from highest to lowest priority. 939 // Get a vector of active renderers, from highest to lowest priority.
938 auto renderers = GetOrderedRenderers(); 940 auto renderers = GetOrderedRenderers();
939 941
940 // The following code requires at least one renderer to be present or it will 942 // The following code requires at least one renderer to be present or it will
941 // busyloop. It's possible for no renderers to exist (we eliminate visible 943 // busyloop. It's possible for no renderers to exist (we eliminate visible
942 // renderers to avoid janking them), so bail early if that's the case. 944 // renderers to avoid janking them), so bail early if that's the case.
943 if (renderers.empty()) 945 if (renderers.empty())
944 return; 946 return;
945 947
946 // Notify a single renderer of memory pressure. 948 // Notify a single renderer of memory pressure.
947 bool notified = false; 949 bool notified = false;
948 while (!notified) { 950 while (!notified) {
949 // Notify the lowest priority renderer that hasn't been notified yet. 951 // Notify the lowest priority renderer that hasn't been notified yet.
950 for (auto rit = renderers.rbegin(); rit != renderers.rend(); ++rit) { 952 for (auto rit = renderers.rbegin(); rit != renderers.rend(); ++rit) {
951 // If this renderer has already been notified then look at the next one. 953 // If this renderer has already been notified then look at the next one.
952 if (!notified_renderers_.insert(*rit).second) 954 if (!notified_renderers_.insert(*rit).second)
953 continue; 955 continue;
954 956
955 // Notify the renderer. 957 // Notify the renderer.
956 notify_renderer_process_.Run(*rit, level); 958 notify_renderer_process_.Run(*rit, level);
959 printf(" ...notified renderer %x\n", (int)(intptr_t)(*rit));
957 notified = true; 960 notified = true;
958 break; 961 break;
959 } 962 }
960 963
961 // If all renderers were processed and none were notified, then all 964 // If all renderers were processed and none were notified, then all
962 // renderers have already been notified. Clear the list and start again. 965 // renderers have already been notified. Clear the list and start again.
963 if (!notified) 966 if (!notified)
964 notified_renderers_.clear(); 967 notified_renderers_.clear();
965 968
966 // This loop can only run at most twice. If it doesn't exit the first time 969 // This loop can only run at most twice. If it doesn't exit the first time
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
1011 // platform. 1014 // platform.
1012 std::string allow_multiple_discards = variations::GetVariationParamValue( 1015 std::string allow_multiple_discards = variations::GetVariationParamValue(
1013 features::kAutomaticTabDiscarding.name, "AllowMultipleDiscards"); 1016 features::kAutomaticTabDiscarding.name, "AllowMultipleDiscards");
1014 return (allow_multiple_discards != "true"); 1017 return (allow_multiple_discards != "true");
1015 #else 1018 #else
1016 return false; 1019 return false;
1017 #endif 1020 #endif
1018 } 1021 }
1019 1022
1020 } // namespace memory 1023 } // namespace memory
OLDNEW
« no previous file with comments | « base/process/process_metrics.h ('k') | content/browser/dom_storage/dom_storage_area.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698