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

Side by Side Diff: ios/chrome/app/application_delegate/memory_warning_helper.mm

Issue 1989873002: Create Memory Helper for memory warnings (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix test Created 4 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
OLDNEW
(Empty)
1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #import "ios/chrome/app/application_delegate/memory_warning_helper.h"
6
7 #include "base/memory/memory_pressure_listener.h"
8 #include "base/metrics/histogram.h"
9 #include "ios/chrome/browser/crash_report/breakpad_helper.h"
10 #import "ios/chrome/browser/metrics/previous_session_info.h"
11
12 namespace {
13 // The number of seconds to wait after a memory warning to clear the flag used
14 // to detect Out Of Memory crashes.
15 // NOTE: From local tests on various devices, this interval ranges between 1 and
16 // 3 seconds. It is set to 5 to ensure all out of memory crashes are identified,
17 // even if this may lead to overcounting them.
18 const CFTimeInterval kOutOfMemoryResetTimeInterval = 5;
19 }
20
21 @interface MemoryWarningHelper () {
22 // The time at which to reset the OOM crash flag in the user defaults. This
23 // is used to handle receiving multiple memory warnings in short
24 // succession.
25 CFAbsoluteTime _outOfMemoryResetTime;
26 }
27 // Resets the OOM crash flag from the user defaults.
28 - (void)resetOutOfMemoryFlagIfNecessary;
29 @end
30
31 @implementation MemoryWarningHelper
32
33 @synthesize foregroundMemoryWarningCount = _foregroundMemoryWarningCount;
34
35 - (void)handleMemoryPressure {
36 // Notify the system that the memory is critical and something should be done.
37 base::MemoryPressureListener::NotifyMemoryPressure(
38 base::MemoryPressureListener::MEMORY_PRESSURE_LEVEL_CRITICAL);
39
40 ++_foregroundMemoryWarningCount;
41 // Register that we might die because of memory. If we are still alive in
42 // |kOutOfMemoryResetTimeInterval| seconds, reset the flag.
43 [[PreviousSessionInfo sharedInstance] setMemoryWarningFlag];
44 _outOfMemoryResetTime =
45 CFAbsoluteTimeGetCurrent() + kOutOfMemoryResetTimeInterval;
46
47 dispatch_after(kOutOfMemoryResetTimeInterval, dispatch_get_main_queue(), ^{
48 [self resetOutOfMemoryFlagIfNecessary];
49 });
50
51 // Add information to breakpad.
sdefresne 2016/05/19 10:09:33 nit: I would move this before the "dispatch_after"
52 breakpad_helper::SetMemoryWarningCount(_foregroundMemoryWarningCount);
53 breakpad_helper::SetMemoryWarningInProgress(true);
54 }
55
56 - (void)resetOutOfMemoryFlagIfNecessary {
57 if (CFAbsoluteTimeGetCurrent() < _outOfMemoryResetTime)
58 return;
59 _outOfMemoryResetTime = 0;
60 [[PreviousSessionInfo sharedInstance] resetMemoryWarningFlag];
61 breakpad_helper::SetMemoryWarningInProgress(false);
62 }
63
64 - (void)resetForegroundMemoryWarningCount {
65 _foregroundMemoryWarningCount = 0;
66 }
67
68 @end
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698