+++ /dev/null
-//
-// MachineGlobals.cpp
-// kdprof
-//
-// Created by James McIlree on 4/17/13.
-// Copyright (c) 2013 Apple. All rights reserved.
-//
-
-#include "global.h"
-
-Globals::Globals() :
- _cpu_count(0),
- _iop_count(0),
- _kernel_size(Kernel::is_64_bit() ? KernelSize::k64 : KernelSize::k32),
- _is_cpu_count_set(false),
- _is_iop_count_set(false),
- _is_kernel_size_set(false),
- _is_summary_start_set(false),
- _is_summary_stop_set(false),
- _is_summary_step_set(false),
- _is_should_print_summary_set(false),
- _is_timebase_set(false),
- _should_read_default_trace_codes(true),
- _should_print_mach_absolute_timestamps(false),
- _should_print_event_index(false),
- _should_print_symbolic_event_codes(true),
- _is_verbose(false),
- _should_presort_events(false),
- _should_print_cpu_summaries(false),
- _should_print_process_summaries(true),
- _should_print_thread_summaries(false),
- _should_print_events(false),
- _should_print_summary(false),
- _should_zero_base_timestamps(true),
- _should_print_process_start_stop_timestamps(false),
- _should_print_csv_summary(false),
- _sort_key(kSortKey::CPU)
-{
- // Default to the current machine's values
- mach_timebase_info(&_timebase_info);
-
- for (auto& entry : KDBG::cpumap()) {
- if (entry.is_iop())
- _iop_count++;
- else
- _cpu_count++;
- }
-
- // If we are unable to get a cpumap,
- // fallback on the current # of cpus
- if (_cpu_count == 0) {
- _cpu_count = Kernel::active_cpu_count();
- _iop_count = 0;
- }
-}
-
-AbsTime Globals::parse_time(const char* arg) const {
-
- char* units;
- uint64_t value = strtoull(arg, &units, 0);
-
- // Unspecified units are treated as seconds
- if (*units == 0 || strcmp(units, "s") == 0) {
- return NanoTime(value * NANOSECONDS_PER_SECOND).abs_time(_timebase_info);
- }
-
- if (strcmp(units, "ms") == 0)
- return NanoTime(value * NANOSECONDS_PER_MILLISECOND).abs_time(_timebase_info);
-
- if (strcmp(units, "us") == 0)
- return NanoTime(value * NANOSECONDS_PER_MICROSECOND).abs_time(_timebase_info);
-
- if (strcmp(units, "ns") == 0)
- return NanoTime(value).abs_time(_timebase_info);
-
- if (strcmp(units, "mabs") == 0) {
- return AbsTime(value);
- }
-
- usage("Unable to parse units on time value");
-}
-
-AbsTime Globals::summary_start(AbsInterval timespan) const {
- AbsTime start(timespan.location());
-
- if (is_summary_start_set()) {
- AbsTime summary_start = parse_time(_summary_start.c_str());
-
- bool absolute_start_stop = (_beginning_of_time == 0);
- if (absolute_start_stop)
- start = summary_start;
- else
- start += summary_start;
- }
-
- return start;
-}
-
-AbsTime Globals::summary_stop(AbsInterval timespan) const {
-
- if (is_summary_stop_set()) {
- AbsTime summary_stop = parse_time(_summary_stop.c_str());
-
- bool absolute_start_stop = (_beginning_of_time == 0);
- if (absolute_start_stop)
- return summary_stop;
- else
- return timespan.location() + summary_stop;
- }
-
- return timespan.max();
-}
-
-AbsTime Globals::summary_step(AbsInterval timespan) const {
- if (is_summary_step_set()) {
- return parse_time(_summary_step.c_str());
- }
-
- return timespan.length();
-}