1 // Copyright 2014 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.
5 #import "ios/chrome/browser/memory/memory_debugger_manager.h"
7 #include "base/ios/weak_nsobject.h"
8 #import "base/mac/bind_objc_block.h"
9 #include "base/mac/scoped_nsobject.h"
10 #include "base/prefs/pref_member.h"
11 #include "base/prefs/pref_registry_simple.h"
12 #include "base/prefs/pref_service.h"
13 #import "ios/chrome/browser/memory/memory_debugger.h"
14 #import "ios/chrome/browser/pref_names.h"
16 @implementation MemoryDebuggerManager {
17 UIView* debuggerParentView_; // weak
18 base::scoped_nsobject<MemoryDebugger> memoryDebugger_;
19 BooleanPrefMember showMemoryDebugger_;
22 - (instancetype)initWithView:(UIView*)debuggerParentView
23 prefs:(PrefService*)prefs {
24 if (self = [super init]) {
25 debuggerParentView_ = debuggerParentView;
27 // Set up the callback for when the pref to show/hide the debugger changes.
28 base::WeakNSObject<MemoryDebuggerManager> weakSelf(self);
29 base::Closure callback = base::BindBlock(^{
30 base::scoped_nsobject<MemoryDebuggerManager> strongSelf(
33 [self onShowMemoryDebuggingToolsChange];
36 showMemoryDebugger_.Init(prefs::kShowMemoryDebuggingTools, prefs, callback);
37 // Invoke the pref change callback once to show the debugger on start up,
39 [self onShowMemoryDebuggingToolsChange];
45 [self tearDownDebugger];
49 #pragma mark - Pref-handling methods
51 // Registers local state prefs.
52 + (void)registerLocalState:(PrefRegistrySimple*)registry {
53 registry->RegisterBooleanPref(prefs::kShowMemoryDebuggingTools, false);
56 // Shows or hides the debugger when the pref changes.
57 - (void)onShowMemoryDebuggingToolsChange {
58 if (showMemoryDebugger_.GetValue()) {
59 memoryDebugger_.reset([[MemoryDebugger alloc] init]);
60 [debuggerParentView_ addSubview:memoryDebugger_];
62 [self tearDownDebugger];
66 // Tears down the debugger so it can be deallocated.
67 - (void)tearDownDebugger {
68 [memoryDebugger_ invalidateTimers];
69 [memoryDebugger_ removeFromSuperview];
70 memoryDebugger_.reset();