1*6777b538SAndroid Build Coastguard Worker// Copyright 2017 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker// Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker// found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Worker#import <Foundation/Foundation.h> 6*6777b538SAndroid Build Coastguard Worker 7*6777b538SAndroid Build Coastguard Worker#import "testing/gtest/ios_enable_coverage.h" 8*6777b538SAndroid Build Coastguard Worker 9*6777b538SAndroid Build Coastguard Worker#if !defined(NDEBUG) && BUILDFLAG(IOS_ENABLE_COVERAGE) && \ 10*6777b538SAndroid Build Coastguard Worker TARGET_IPHONE_SIMULATOR 11*6777b538SAndroid Build Coastguard Workerextern "C" void __llvm_profile_set_filename(const char* name); 12*6777b538SAndroid Build Coastguard Worker#endif 13*6777b538SAndroid Build Coastguard Worker 14*6777b538SAndroid Build Coastguard Workernamespace coverage_util { 15*6777b538SAndroid Build Coastguard Worker 16*6777b538SAndroid Build Coastguard Workervoid ConfigureCoverageReportPath() { 17*6777b538SAndroid Build Coastguard Worker// Targets won't build on real devices with BUILDFLAG(IOS_ENABLE_COVERAGE) 18*6777b538SAndroid Build Coastguard Worker// because of llvm library linking issue for arm64 architecture. 19*6777b538SAndroid Build Coastguard Worker#if !defined(NDEBUG) && BUILDFLAG(IOS_ENABLE_COVERAGE) && \ 20*6777b538SAndroid Build Coastguard Worker TARGET_IPHONE_SIMULATOR 21*6777b538SAndroid Build Coastguard Worker static dispatch_once_t once_token; 22*6777b538SAndroid Build Coastguard Worker dispatch_once(&once_token, ^{ 23*6777b538SAndroid Build Coastguard Worker // Writes the profraw file to the simulator shared resources directory, 24*6777b538SAndroid Build Coastguard Worker // where the app has write rights, and will be preserved after app is 25*6777b538SAndroid Build Coastguard Worker // killed. 26*6777b538SAndroid Build Coastguard Worker NSString* shared_resources_path = 27*6777b538SAndroid Build Coastguard Worker NSProcessInfo.processInfo 28*6777b538SAndroid Build Coastguard Worker .environment[@"SIMULATOR_SHARED_RESOURCES_DIRECTORY"]; 29*6777b538SAndroid Build Coastguard Worker // UUID ensures that there won't be a conflict when multiple apps are 30*6777b538SAndroid Build Coastguard Worker // launched in one test suite in EG2. %m enables on-line profile merging. 31*6777b538SAndroid Build Coastguard Worker // %c helps preserve coverage data at crash. 32*6777b538SAndroid Build Coastguard Worker NSString* file_name = [NSString 33*6777b538SAndroid Build Coastguard Worker stringWithFormat:@"%@-%%m-%%c.profraw", NSUUID.UUID.UUIDString]; 34*6777b538SAndroid Build Coastguard Worker NSString* file_path = 35*6777b538SAndroid Build Coastguard Worker [shared_resources_path stringByAppendingPathComponent:file_name]; 36*6777b538SAndroid Build Coastguard Worker 37*6777b538SAndroid Build Coastguard Worker // For documentation, see: 38*6777b538SAndroid Build Coastguard Worker // http://clang.llvm.org/docs/SourceBasedCodeCoverage.html 39*6777b538SAndroid Build Coastguard Worker __llvm_profile_set_filename( 40*6777b538SAndroid Build Coastguard Worker [file_path cStringUsingEncoding:NSUTF8StringEncoding]); 41*6777b538SAndroid Build Coastguard Worker 42*6777b538SAndroid Build Coastguard Worker // Print the path for easier retrieval. 43*6777b538SAndroid Build Coastguard Worker NSLog(@"Coverage data at %@.", file_path); 44*6777b538SAndroid Build Coastguard Worker }); 45*6777b538SAndroid Build Coastguard Worker#endif // !defined(NDEBUG) && BUILDFLAG(IOS_ENABLE_COVERAGE) && 46*6777b538SAndroid Build Coastguard Worker // TARGET_IPHONE_SIMULATOR 47*6777b538SAndroid Build Coastguard Worker} 48*6777b538SAndroid Build Coastguard Worker 49*6777b538SAndroid Build Coastguard Worker} // namespace coverage_util 50