Commit 6ed59ef2 authored by Eugene But's avatar Eugene But Committed by Commit Bot

[ios] Record metrics for stored CertificatePolicyCache size

This CL adds 2 new histogram. One for cert policy cache stored for Tab
and one for all Tabs.

Bug: 1140990
Change-Id: I03de0330759915974b4c89ceb7ee929d0118a53e
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2519153
Commit-Queue: Eugene But <eugenebut@chromium.org>
Auto-Submit: Eugene But <eugenebut@chromium.org>
Reviewed-by: default avatarJesse Doherty <jwd@chromium.org>
Reviewed-by: default avatarGauthier Ambard <gambard@chromium.org>
Cr-Commit-Position: refs/heads/master@{#824610}
parent 75e8e906
...@@ -245,6 +245,7 @@ NSString* const kSessionFileName = ...@@ -245,6 +245,7 @@ NSString* const kSessionFileName =
@try { @try {
NSError* error = nil; NSError* error = nil;
size_t previous_cert_policy_bytes = web::GetCertPolicyBytesEncoded();
NSData* sessionData = [NSKeyedArchiver archivedDataWithRootObject:session NSData* sessionData = [NSKeyedArchiver archivedDataWithRootObject:session
requiringSecureCoding:NO requiringSecureCoding:NO
error:&error]; error:&error];
...@@ -255,8 +256,12 @@ NSString* const kSessionFileName = ...@@ -255,8 +256,12 @@ NSString* const kSessionFileName =
return; return;
} }
UMA_HISTOGRAM_COUNTS_100000("Session.WebStates.SerializedSize", base::UmaHistogramCounts100000(
sessionData.length / 1024); "Session.WebStates.AllSerializedCertPolicyCachesSize",
web::GetCertPolicyBytesEncoded() - previous_cert_policy_bytes / 1024);
base::UmaHistogramCounts100000("Session.WebStates.SerializedSize",
sessionData.length / 1024);
_taskRunner->PostTask(FROM_HERE, base::BindOnce(^{ _taskRunner->PostTask(FROM_HERE, base::BindOnce(^{
[self performSaveSessionData:sessionData [self performSaveSessionData:sessionData
......
...@@ -22,6 +22,11 @@ namespace web { ...@@ -22,6 +22,11 @@ namespace web {
extern NSString* const kCertificateSerializationKey; extern NSString* const kCertificateSerializationKey;
extern NSString* const kHostSerializationKey; extern NSString* const kHostSerializationKey;
extern NSString* const kStatusSerializationKey; extern NSString* const kStatusSerializationKey;
// Total bytes serialized during CRWSessionCertificateStorage encoding since the
// uptime.
size_t GetCertPolicyBytesEncoded();
} // namespace web } // namespace web
// A serializable representation of a certificate. // A serializable representation of a certificate.
......
...@@ -13,19 +13,12 @@ ...@@ -13,19 +13,12 @@
#error "This file requires ARC support." #error "This file requires ARC support."
#endif #endif
namespace web {
// CRWSessionCertificateStorage serialization keys.
NSString* const kCertificateSerializationKey = @"CertificateSerializationKey";
NSString* const kHostSerializationKey = @"HostSerializationKey";
NSString* const kStatusSerializationKey = @"StatusSerializationKey";
// CRWSessionCertificatePolicyCacheStorage serialization keys.
NSString* const kCertificateStoragesKey = @"kCertificateStoragesKey";
NSString* const kCertificateStoragesDeprecatedKey = @"allowedCertificates";
} // namespace web
namespace { namespace {
// Total bytes serialized during CRWSessionCertificateStorage encoding since the
// uptime.
static size_t gBytesEncoded = 0;
// The deprecated serialization technique serialized each certificate policy as // The deprecated serialization technique serialized each certificate policy as
// an NSArray, where the necessary information is stored at the following // an NSArray, where the necessary information is stored at the following
// indices. // indices.
...@@ -51,6 +44,22 @@ scoped_refptr<net::X509Certificate> NSDataToCertificate(NSData* data) { ...@@ -51,6 +44,22 @@ scoped_refptr<net::X509Certificate> NSDataToCertificate(NSData* data) {
} // namespace } // namespace
namespace web {
// CRWSessionCertificateStorage serialization keys.
NSString* const kCertificateSerializationKey = @"CertificateSerializationKey";
NSString* const kHostSerializationKey = @"HostSerializationKey";
NSString* const kStatusSerializationKey = @"StatusSerializationKey";
// CRWSessionCertificatePolicyCacheStorage serialization keys.
NSString* const kCertificateStoragesKey = @"kCertificateStoragesKey";
NSString* const kCertificateStoragesDeprecatedKey = @"allowedCertificates";
size_t GetCertPolicyBytesEncoded() {
return gBytesEncoded;
}
} // namespace web
#pragma mark - CRWSessionCertificateStorage #pragma mark - CRWSessionCertificateStorage
@interface CRWSessionCertificateStorage () { @interface CRWSessionCertificateStorage () {
...@@ -110,11 +119,13 @@ scoped_refptr<net::X509Certificate> NSDataToCertificate(NSData* data) { ...@@ -110,11 +119,13 @@ scoped_refptr<net::X509Certificate> NSDataToCertificate(NSData* data) {
} }
- (void)encodeWithCoder:(NSCoder*)aCoder { - (void)encodeWithCoder:(NSCoder*)aCoder {
[aCoder encodeObject:CertificateToNSData(_certificate.get()) NSData* certData = CertificateToNSData(_certificate.get());
forKey:web::kCertificateSerializationKey]; [aCoder encodeObject:certData forKey:web::kCertificateSerializationKey];
[aCoder encodeObject:base::SysUTF8ToNSString(_host) [aCoder encodeObject:base::SysUTF8ToNSString(_host)
forKey:web::kHostSerializationKey]; forKey:web::kHostSerializationKey];
[aCoder encodeObject:@(_status) forKey:web::kStatusSerializationKey]; [aCoder encodeObject:@(_status) forKey:web::kStatusSerializationKey];
gBytesEncoded += certData.length + _host.size() + sizeof(_status);
} }
#pragma mark Private #pragma mark Private
......
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
#import "ios/web/public/session/crw_session_storage.h" #import "ios/web/public/session/crw_session_storage.h"
#include "base/metrics/histogram_functions.h"
#include "ios/web/common/features.h" #include "ios/web/common/features.h"
#import "ios/web/navigation/nscoder_util.h" #import "ios/web/navigation/nscoder_util.h"
#import "ios/web/public/session/crw_session_certificate_policy_cache_storage.h" #import "ios/web/public/session/crw_session_certificate_policy_cache_storage.h"
...@@ -106,8 +107,12 @@ NSString* const kLastCommittedItemIndexDeprecatedKey = ...@@ -106,8 +107,12 @@ NSString* const kLastCommittedItemIndexDeprecatedKey =
[coder encodeInt:self.lastCommittedItemIndex [coder encodeInt:self.lastCommittedItemIndex
forKey:kLastCommittedItemIndexKey]; forKey:kLastCommittedItemIndexKey];
[coder encodeObject:self.itemStorages forKey:kItemStoragesKey]; [coder encodeObject:self.itemStorages forKey:kItemStoragesKey];
size_t previous_cert_policy_bytes = web::GetCertPolicyBytesEncoded();
[coder encodeObject:self.certPolicyCacheStorage [coder encodeObject:self.certPolicyCacheStorage
forKey:kCertificatePolicyCacheStorageKey]; forKey:kCertificatePolicyCacheStorageKey];
base::UmaHistogramCounts100000(
"Session.WebStates.SerializedCertPolicyCacheSize",
web::GetCertPolicyBytesEncoded() - previous_cert_policy_bytes / 1024);
if (_userData) if (_userData)
_userData->Encode(coder); _userData->Encode(coder);
web::UserAgentType userAgentType = _userAgentType; web::UserAgentType userAgentType = _userAgentType;
......
...@@ -419,6 +419,17 @@ reviews. Googlers can read more about this at go/gwsq-gerrit. ...@@ -419,6 +419,17 @@ reviews. Googlers can read more about this at go/gwsq-gerrit.
</summary> </summary>
</histogram> </histogram>
<histogram name="Session.WebStates.AllSerializedCertPolicyCachesSize"
units="KB" expires_after="2021-06-10">
<owner>eugenebut@chromium.org</owner>
<owner>gambard@chromium.org</owner>
<summary>
The size of all cert policy caches for all open tabs. Recorded when
SessionServiceIOS encodes the data, which happens on page loads, tab changes
and app backgrounding.
</summary>
</histogram>
<histogram name="Session.WebStates.ForwardItemsCountAfterNavigation" <histogram name="Session.WebStates.ForwardItemsCountAfterNavigation"
units="items" expires_after="2020-12-01"> units="items" expires_after="2020-12-01">
<obsolete> <obsolete>
...@@ -475,6 +486,17 @@ reviews. Googlers can read more about this at go/gwsq-gerrit. ...@@ -475,6 +486,17 @@ reviews. Googlers can read more about this at go/gwsq-gerrit.
</summary> </summary>
</histogram> </histogram>
<histogram name="Session.WebStates.SerializedCertPolicyCacheSize" units="KB"
expires_after="2021-06-10">
<owner>eugenebut@chromium.org</owner>
<owner>gambard@chromium.org</owner>
<summary>
The size of a single cert policy cache for one tab. Recorded when
CRWNavigationItemStorage encodes the data, which happens on page loads, tab
changes and app backgrounding.
</summary>
</histogram>
<histogram name="Session.WebStates.SerializedSize" units="KB" <histogram name="Session.WebStates.SerializedSize" units="KB"
expires_after="2021-06-10"> expires_after="2021-06-10">
<owner>justincohen@chromium.org</owner> <owner>justincohen@chromium.org</owner>
......
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