mirror of
https://github.com/chromium/crashpad.git
synced 2024-12-27 15:32:10 +08:00
30b2f4ba38
This CL introduces a new crash key 'crashpad_uptime_ns' that records the number of nanoseconds between when Crashpad was initialized and when a snapshot is generated. Crashpad minidumps record the MDRawMiscInfo process_create_time using a sysctl(KERN_PROC).kp_proc.p_starttime. This time is used to display the 'uptime' of a process. However, iOS 15 and later has a feature that 'prewarms' the app to reduce the amount of time the user waits before the app is usable. This mean crashes that may happen immediately on startup would appear to happen minutes or hours after process creation time. While initial implementations of prewarming would include some parts of main, since iOS16 prewarming is complete before main, and therefore before Crashpad is typically initialized. Bug: crashpad:472 Change-Id: Iff960e37ae40121bd5927d319a2767d1cafce846 Reviewed-on: https://chromium-review.googlesource.com/c/crashpad/crashpad/+/5171091 Reviewed-by: Ben Hamilton <benhamilton@google.com> Reviewed-by: Mark Mentovai <mark@chromium.org> Commit-Queue: Justin Cohen <justincohen@chromium.org>
98 lines
3.6 KiB
Objective-C
98 lines
3.6 KiB
Objective-C
// Copyright 2020 The Crashpad Authors
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
#ifndef CRASHPAD_UTIL_IOS_IOS_SYSTEM_DATA_COLLECTOR_H_
|
|
#define CRASHPAD_UTIL_IOS_IOS_SYSTEM_DATA_COLLECTOR_H_
|
|
|
|
#import <CoreFoundation/CoreFoundation.h>
|
|
|
|
#include <functional>
|
|
#include <string>
|
|
|
|
namespace crashpad {
|
|
namespace internal {
|
|
|
|
//! \brief Used to collect system level data before a crash occurs.
|
|
class IOSSystemDataCollector {
|
|
public:
|
|
IOSSystemDataCollector();
|
|
~IOSSystemDataCollector();
|
|
|
|
void OSVersion(int* major, int* minor, int* bugfix) const;
|
|
const std::string& MachineDescription() const { return machine_description_; }
|
|
int ProcessorCount() const { return processor_count_; }
|
|
const std::string& Build() const { return build_; }
|
|
const std::string& BundleIdentifier() const { return bundle_identifier_; }
|
|
bool IsExtension() const { return is_extension_; }
|
|
const std::string& CPUVendor() const { return cpu_vendor_; }
|
|
bool HasDaylightSavingTime() const { return has_next_daylight_saving_time_; }
|
|
bool IsDaylightSavingTime() const { return is_daylight_saving_time_; }
|
|
int StandardOffsetSeconds() const { return standard_offset_seconds_; }
|
|
int DaylightOffsetSeconds() const { return daylight_offset_seconds_; }
|
|
const std::string& StandardName() const { return standard_name_; }
|
|
const std::string& DaylightName() const { return daylight_name_; }
|
|
bool IsApplicationActive() const { return active_; }
|
|
uint64_t AddressMask() const { return address_mask_; }
|
|
uint64_t InitializationTime() const { return initialization_time_ns_; }
|
|
|
|
// Currently unused by minidump.
|
|
int Orientation() const { return orientation_; }
|
|
|
|
// A completion callback that takes a bool indicating that the application has
|
|
// become active or inactive.
|
|
using ActiveApplicationCallback = std::function<void(bool)>;
|
|
|
|
void SetActiveApplicationCallback(ActiveApplicationCallback callback) {
|
|
active_application_callback_ = callback;
|
|
}
|
|
|
|
private:
|
|
// Notification handlers for time zone, orientation and active state.
|
|
void InstallHandlers();
|
|
void SystemTimeZoneDidChangeNotification();
|
|
void OrientationDidChangeNotification();
|
|
void ApplicationDidChangeActiveNotification();
|
|
|
|
int major_version_;
|
|
int minor_version_;
|
|
int patch_version_;
|
|
std::string build_;
|
|
std::string bundle_identifier_;
|
|
bool is_extension_;
|
|
std::string machine_description_;
|
|
int orientation_;
|
|
bool active_;
|
|
int processor_count_;
|
|
std::string cpu_vendor_;
|
|
bool has_next_daylight_saving_time_;
|
|
bool is_daylight_saving_time_;
|
|
int standard_offset_seconds_;
|
|
int daylight_offset_seconds_;
|
|
std::string standard_name_;
|
|
std::string daylight_name_;
|
|
ActiveApplicationCallback active_application_callback_;
|
|
uint64_t address_mask_;
|
|
|
|
// Time in nanoseconds as returned by ClockMonotonicNanoseconds() to store the
|
|
// crashpad start time. This clock increments monotonically but pauses while
|
|
// the system is asleep. It should not be compared to other system time
|
|
// sources.
|
|
uint64_t initialization_time_ns_;
|
|
};
|
|
|
|
} // namespace internal
|
|
} // namespace crashpad
|
|
|
|
#endif // CRASHPAD_UTIL_IOS_IOS_SYSTEM_DATA_COLLECTOR_H_
|