// Copyright (c) 2006-2011 The Chromium Authors. All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions // are met: // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in // the documentation and/or other materials provided with the // distribution. // * Neither the name of Google, Inc. nor the names of its contributors // may be used to endorse or promote products derived from this // software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS // FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE // COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, // BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS // OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED // AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, // OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT // OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF // SUCH DAMAGE.
// These are for MOZ_BASE_PROFILER_LOGGING and above. It's the default logging // level for the profiler, and should be used sparingly. #define LOG_TEST ::mozilla::baseprofiler::LogTest(3) #define LOG(arg, ...) \ do { \ if (LOG_TEST) { \
::mozilla::baseprofiler::PrintToConsole( \ "[I %d/%d] " arg "\n", \ int(::mozilla::baseprofiler::profiler_current_process_id() \
.ToNumber()), \ int(::mozilla::baseprofiler::profiler_current_thread_id() \
.ToNumber()), \ ##__VA_ARGS__); \
} \
} while (0)
// These are for MOZ_BASE_PROFILER_DEBUG_LOGGING. It should be used for logging // that is somewhat more verbose than LOG. #define DEBUG_LOG_TEST ::mozilla::baseprofiler::LogTest(4) #define DEBUG_LOG(arg, ...) \ do { \ if (DEBUG_LOG_TEST) { \
::mozilla::baseprofiler::PrintToConsole( \ "[D %d/%d] " arg "\n", \ int(::mozilla::baseprofiler::profiler_current_process_id() \
.ToNumber()), \ int(::mozilla::baseprofiler::profiler_current_thread_id() \
.ToNumber()), \ ##__VA_ARGS__); \
} \
} while (0)
// These are for MOZ_BASE_PROFILER_VERBOSE_LOGGING. It should be used for // logging that is somewhat more verbose than DEBUG_LOG. #define VERBOSE_LOG_TEST ::mozilla::baseprofiler::LogTest(5) #define VERBOSE_LOG(arg, ...) \ do { \ if (VERBOSE_LOG_TEST) { \
::mozilla::baseprofiler::PrintToConsole( \ "[V %d/%d] " arg "\n", \ int(::mozilla::baseprofiler::profiler_current_process_id() \
.ToNumber()), \ int(::mozilla::baseprofiler::profiler_current_thread_id() \
.ToNumber()), \ ##__VA_ARGS__); \
} \
} while (0)
namespace mozilla {
class JSONWriter;
namespace baseprofiler {
// If positive, skip stack-sampling in the sampler thread loop. // Users should increment it atomically when samplings should be avoided, and // later decrement it back. Multiple uses can overlap. // There could be a sampling in progress when this is first incremented, so if // it is critical to prevent any sampling, lock the profiler mutex instead. // Relaxed ordering, because it's used to request that the profiler pause // future sampling; this is not time critical, nor dependent on anything else. extern mozilla::Atomic<int, mozilla::MemoryOrdering::Relaxed> gSkipSampling;
typedef uint8_t* Address;
class PlatformData;
// We can't new/delete the type safely without defining it // (-Wdelete-incomplete). Use these to hide the details from clients. struct PlatformDataDestructor { voidoperator()(PlatformData*);
};
// Convert the array of strings to a bitfield.
uint32_t ParseFeaturesFromStringArray(constchar** aFeatures,
uint32_t aFeatureCount, bool aIsStartup = false);
// Flags to conveniently track various JS instrumentations. enumclass JSInstrumentationFlags {
StackSampling = 0x1,
Allocations = 0x2,
};
// Record an exit profile from a child process. void profiler_received_exit_profile(const std::string& aExitProfile);
// Extract all received exit profiles that have not yet expired (i.e., they // still intersect with this process' buffer range).
Vector<std::string> profiler_move_exit_profiles();
} // namespace baseprofiler
} // namespace mozilla
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.