crashpad/util/ios/ios_system_data_collector.h
Justin Cohen 243dffb045 ios: Stop prune and upload thread when app is inactive and may suspend.
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>
2022-03-23 02:53:15 +00:00

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_