| Index: ios/chrome/browser/memory/memory_debugger_manager.mm
|
| diff --git a/ios/chrome/browser/memory/memory_debugger_manager.mm b/ios/chrome/browser/memory/memory_debugger_manager.mm
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..e9e9acbce275453808f15fdc09591526a9b8e942
|
| --- /dev/null
|
| +++ b/ios/chrome/browser/memory/memory_debugger_manager.mm
|
| @@ -0,0 +1,72 @@
|
| +// Copyright 2014 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#import "ios/chrome/browser/memory/memory_debugger_manager.h"
|
| +
|
| +#include "base/ios/weak_nsobject.h"
|
| +#import "base/mac/bind_objc_block.h"
|
| +#include "base/mac/scoped_nsobject.h"
|
| +#include "base/prefs/pref_member.h"
|
| +#include "base/prefs/pref_registry_simple.h"
|
| +#include "base/prefs/pref_service.h"
|
| +#import "ios/chrome/browser/memory/memory_debugger.h"
|
| +#import "ios/chrome/browser/pref_names.h"
|
| +
|
| +@implementation MemoryDebuggerManager {
|
| + UIView* debuggerParentView_; // weak
|
| + base::scoped_nsobject<MemoryDebugger> memoryDebugger_;
|
| + BooleanPrefMember showMemoryDebugger_;
|
| +}
|
| +
|
| +- (instancetype)initWithView:(UIView*)debuggerParentView
|
| + prefs:(PrefService*)prefs {
|
| + if (self = [super init]) {
|
| + debuggerParentView_ = debuggerParentView;
|
| +
|
| + // Set up the callback for when the pref to show/hide the debugger changes.
|
| + base::WeakNSObject<MemoryDebuggerManager> weakSelf(self);
|
| + base::Closure callback = base::BindBlock(^{
|
| + base::scoped_nsobject<MemoryDebuggerManager> strongSelf(
|
| + [weakSelf retain]);
|
| + if (strongSelf) {
|
| + [self onShowMemoryDebuggingToolsChange];
|
| + }
|
| + });
|
| + showMemoryDebugger_.Init(prefs::kShowMemoryDebuggingTools, prefs, callback);
|
| + // Invoke the pref change callback once to show the debugger on start up,
|
| + // if necessary.
|
| + [self onShowMemoryDebuggingToolsChange];
|
| + }
|
| + return self;
|
| +}
|
| +
|
| +- (void)dealloc {
|
| + [self tearDownDebugger];
|
| + [super dealloc];
|
| +}
|
| +
|
| +#pragma mark - Pref-handling methods
|
| +
|
| +// Registers local state prefs.
|
| ++ (void)registerLocalState:(PrefRegistrySimple*)registry {
|
| + registry->RegisterBooleanPref(prefs::kShowMemoryDebuggingTools, false);
|
| +}
|
| +
|
| +// Shows or hides the debugger when the pref changes.
|
| +- (void)onShowMemoryDebuggingToolsChange {
|
| + if (showMemoryDebugger_.GetValue()) {
|
| + memoryDebugger_.reset([[MemoryDebugger alloc] init]);
|
| + [debuggerParentView_ addSubview:memoryDebugger_];
|
| + } else {
|
| + [self tearDownDebugger];
|
| + }
|
| +}
|
| +
|
| +// Tears down the debugger so it can be deallocated.
|
| +- (void)tearDownDebugger {
|
| + [memoryDebugger_ invalidateTimers];
|
| + [memoryDebugger_ removeFromSuperview];
|
| + memoryDebugger_.reset();
|
| +}
|
| +@end
|
|
|