Commit 31974273 authored by Eugene But's avatar Eugene But Committed by Commit Bot

[ios][breadcrumbs] Log device orientation changes

Some crashes required changing device orientation in order to reproduce.
This CL logs specific orientation value after receiving
UIDeviceOrientationDidChangeNotification

Bug: 1046225
Change-Id: Iacf291b3ee561759a2ccd2d5c866349aaafacdf0
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2250505Reviewed-by: default avatarMike Dougherty <michaeldo@chromium.org>
Commit-Queue: Eugene But <eugenebut@chromium.org>
Cr-Commit-Position: refs/heads/master@{#779855}
parent ee028f65
......@@ -184,8 +184,8 @@ source_set("pref_names") {
source_set("browser_impl") {
configs += [ "//build/config/compiler:enable_arc" ]
sources = [
"application_context_impl.cc",
"application_context_impl.h",
"application_context_impl.mm",
"ios_chrome_main_parts.h",
"ios_chrome_main_parts.mm",
]
......
......@@ -47,7 +47,7 @@
#include "ios/chrome/browser/browser_state/chrome_browser_state_manager_impl.h"
#include "ios/chrome/browser/chrome_paths.h"
#include "ios/chrome/browser/component_updater/ios_component_updater_configurator.h"
#include "ios/chrome/browser/crash_report/breadcrumbs/application_breadcrumbs_logger.h"
#import "ios/chrome/browser/crash_report/breadcrumbs/application_breadcrumbs_logger.h"
#include "ios/chrome/browser/crash_report/breadcrumbs/breadcrumb_manager.h"
#include "ios/chrome/browser/crash_report/breadcrumbs/features.h"
#include "ios/chrome/browser/gcm/ios_chrome_gcm_profile_service_factory.h"
......@@ -76,6 +76,10 @@
#include "services/network/public/mojom/network_service.mojom.h"
#include "ui/base/resource/resource_bundle.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif
namespace {
// Requests a network::mojom::ProxyResolvingSocketFactory on the UI thread.
......
......@@ -5,6 +5,8 @@
#ifndef IOS_CHROME_BROWSER_CRASH_REPORT_BREADCRUMBS_APPLICATION_BREADCRUMBS_LOGGER_H_
#define IOS_CHROME_BROWSER_CRASH_REPORT_BREADCRUMBS_APPLICATION_BREADCRUMBS_LOGGER_H_
#import <Foundation/Foundation.h>
#include <memory>
#include "base/memory/memory_pressure_listener.h"
......@@ -16,6 +18,9 @@ class TimeTicks;
class BreadcrumbManager;
// Name of event logged when device orientation is changed.
extern const char kBreadcrumbOrientation[];
// Listens for and logs application wide breadcrumb events to the
// BreadcrumbManager passed in the constructor.
class ApplicationBreadcrumbsLogger {
......@@ -44,6 +49,8 @@ class ApplicationBreadcrumbsLogger {
base::ActionCallback user_action_callback_;
// A memory pressure listener which observes memory pressure events.
std::unique_ptr<base::MemoryPressureListener> memory_pressure_listener_;
// Observes device orientation.
id<NSObject> orientation_observer_;
};
#endif // IOS_CHROME_BROWSER_CRASH_REPORT_BREADCRUMBS_APPLICATION_BREADCRUMBS_LOGGER_H_
......@@ -2,7 +2,9 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "ios/chrome/browser/crash_report/breadcrumbs/application_breadcrumbs_logger.h"
#import "ios/chrome/browser/crash_report/breadcrumbs/application_breadcrumbs_logger.h"
#import <UIKit/UIKit.h>
#include "base/bind.h"
#include "base/strings/stringprintf.h"
......@@ -14,6 +16,8 @@
#error "This file requires ARC support."
#endif
const char kBreadcrumbOrientation[] = "Orientation";
ApplicationBreadcrumbsLogger::ApplicationBreadcrumbsLogger(
BreadcrumbManager* breadcrumb_manager)
: breadcrumb_manager_(breadcrumb_manager),
......@@ -25,9 +29,42 @@ ApplicationBreadcrumbsLogger::ApplicationBreadcrumbsLogger(
base::Unretained(this)))) {
base::AddActionCallback(user_action_callback_);
breakpad::MonitorBreadcrumbManager(breadcrumb_manager_);
orientation_observer_ = [NSNotificationCenter.defaultCenter
addObserverForName:UIDeviceOrientationDidChangeNotification
object:nil
queue:nil
usingBlock:^(NSNotification*) {
std::string event(kBreadcrumbOrientation);
switch (UIDevice.currentDevice.orientation) {
case UIDeviceOrientationUnknown:
event += " #unknown";
break;
case UIDeviceOrientationPortrait:
event += " #portrait";
break;
case UIDeviceOrientationPortraitUpsideDown:
event += " #portrait-upside-down";
break;
case UIDeviceOrientationLandscapeLeft:
event += " #landscape-left";
break;
case UIDeviceOrientationLandscapeRight:
event += " #landscape-right";
break;
case UIDeviceOrientationFaceUp:
event += " #face-up";
break;
case UIDeviceOrientationFaceDown:
event += " #face-down";
break;
}
breadcrumb_manager_->AddEvent(event);
}];
}
ApplicationBreadcrumbsLogger::~ApplicationBreadcrumbsLogger() {
[NSNotificationCenter.defaultCenter removeObserver:orientation_observer_];
breadcrumb_manager_->AddEvent("Shutdown");
base::RemoveActionCallback(user_action_callback_);
breakpad::StopMonitoringBreadcrumbManager(breadcrumb_manager_);
......
......@@ -2,7 +2,9 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "ios/chrome/browser/crash_report/breadcrumbs/application_breadcrumbs_logger.h"
#import "ios/chrome/browser/crash_report/breadcrumbs/application_breadcrumbs_logger.h"
#import <UIKit/UIKit.h>
#include "base/memory/memory_pressure_listener.h"
#include "base/metrics/user_metrics_action.h"
......@@ -84,3 +86,16 @@ TEST_F(ApplicationBreadcrumbsLoggerTest, DISABLED_MemoryPressure) {
events.pop_front();
EXPECT_NE(std::string::npos, events.front().find("Critical"));
}
// Tests logging device orientation.
TEST_F(ApplicationBreadcrumbsLoggerTest, Orientation) {
[NSNotificationCenter.defaultCenter
postNotificationName:UIDeviceOrientationDidChangeNotification
object:nil];
std::list<std::string> events = breadcrumb_manager_.GetEvents(0);
ASSERT_EQ(1ul, events.size());
EXPECT_NE(std::string::npos, events.front().find(kBreadcrumbOrientation))
<< events.front();
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment