|  | // Copyright 2013 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. | 
|  |  | 
|  | #include "base/debug/dump_without_crashing.h" | 
|  |  | 
|  | #include "base/logging.h" | 
|  |  | 
|  | namespace { | 
|  |  | 
|  | // Pointer to the function that's called by DumpWithoutCrashing() to dump the | 
|  | // process's memory. | 
|  | void(CDECL* dump_without_crashing_function_)() = nullptr; | 
|  |  | 
|  | }  // namespace | 
|  |  | 
|  | namespace base { | 
|  |  | 
|  | namespace debug { | 
|  |  | 
|  | bool DumpWithoutCrashing() { | 
|  | if (dump_without_crashing_function_) { | 
|  | (*dump_without_crashing_function_)(); | 
|  | return true; | 
|  | } | 
|  | return false; | 
|  | } | 
|  |  | 
|  | void SetDumpWithoutCrashingFunction(void (CDECL *function)()) { | 
|  | #if !defined(COMPONENT_BUILD) | 
|  | // In component builds, the same base is shared between modules | 
|  | // so might be initialized several times. However in non- | 
|  | // component builds this should never happen. | 
|  | DCHECK(!dump_without_crashing_function_); | 
|  | #endif | 
|  | dump_without_crashing_function_ = function; | 
|  | } | 
|  |  | 
|  | }  // namespace debug | 
|  |  | 
|  | }  // namespace base |