mirror of
https://github.com/chromium/crashpad.git
synced 2025-03-10 06:36:02 +00:00
Stop the prune thread and the upload thread when moving to the inactive/background state. This will reduce the number of 0xdead10cc system kills from having a file lock during iOS suspend. Wait to start the prune thread when the application is active. Otherwise, for iOS prewarmed applications, the prune thread will regularly start when the application is foregrounded for the first time when the user intentionally runs the app. It's still possible for either the prune thread or the upload thread to have a file lock during iOS suspend, such as when a task started in the foreground and does not complete in time for suspension. Future work should include considering BackgroundTasks and/or NSURLSessions, which can more safely run in the background. Bug: crashpad: 400 Change-Id: Ic7d4687eb795fe585327f128aa84a5928141f4a9 Reviewed-on: https://chromium-review.googlesource.com/c/crashpad/crashpad/+/3517967 Reviewed-by: Robert Sesek <rsesek@chromium.org> Commit-Queue: Justin Cohen <justincohen@chromium.org>
89 lines
3.2 KiB
Objective-C
89 lines
3.2 KiB
Objective-C
// Copyright 2020 The Crashpad Authors. All rights reserved.
|
|
//
|
|
// 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_; }
|
|
|
|
// 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_;
|
|
};
|
|
|
|
} // namespace internal
|
|
} // namespace crashpad
|
|
|
|
#endif // CRASHPAD_UTIL_IOS_IOS_SYSTEM_DATA_COLLECTOR_H_
|