Reland "iOS: Save perf results under Documents/perf_result.json"
This will require a manual roll to downstream projects, since the //test:perf_test target was introduced. This is a reland of 10a8e7a9b5261a7e3ce19900ba3511be3b5911f8 Original change's description: > iOS: Save perf results under Documents/perf_result.json > > TBR=henrika@webrtc.org > > Bug: webrtc:7156 > Change-Id: Ib00992cce0007e0b5c9274340df1a892f810b0c5 > Reviewed-on: https://webrtc-review.googlesource.com/29202 > Commit-Queue: Edward Lemur <ehmaldonado@webrtc.org> > Reviewed-by: Henrik Andreassson <henrika@webrtc.org> > Reviewed-by: Patrik Höglund <phoglund@webrtc.org> > Cr-Commit-Position: refs/heads/master@{#21244} TBR=henrika@webrtc.org, phoglund@webrtc.org No-Try: true Bug: webrtc:7156 Change-Id: Iecdb108f605fd1c98acde4d50ab4f5a7b5f6bfaf Reviewed-on: https://webrtc-review.googlesource.com/32761 Reviewed-by: Edward Lemur <ehmaldonado@webrtc.org> Commit-Queue: Edward Lemur <ehmaldonado@webrtc.org> Cr-Commit-Position: refs/heads/master@{#21252}
This commit is contained in:
@ -255,6 +255,7 @@ if (rtc_include_tests) {
|
|||||||
"../test:direct_transport",
|
"../test:direct_transport",
|
||||||
"../test:fake_audio_device",
|
"../test:fake_audio_device",
|
||||||
"../test:field_trial",
|
"../test:field_trial",
|
||||||
|
"../test:perf_test",
|
||||||
"../test:test_common",
|
"../test:test_common",
|
||||||
"../test:test_support",
|
"../test:test_support",
|
||||||
"../test:video_test_common",
|
"../test:video_test_common",
|
||||||
|
@ -1318,6 +1318,7 @@ if (rtc_include_tests) {
|
|||||||
"../../rtc_base:rtc_base_approved",
|
"../../rtc_base:rtc_base_approved",
|
||||||
"../../system_wrappers",
|
"../../system_wrappers",
|
||||||
"../../system_wrappers:field_trial_api",
|
"../../system_wrappers:field_trial_api",
|
||||||
|
"../../test:perf_test",
|
||||||
"../../test:test_support",
|
"../../test:test_support",
|
||||||
]
|
]
|
||||||
|
|
||||||
@ -1806,6 +1807,7 @@ if (rtc_include_tests) {
|
|||||||
|
|
||||||
deps = [
|
deps = [
|
||||||
":isac_fix",
|
":isac_fix",
|
||||||
|
"../../test:perf_test",
|
||||||
"../../test:test_support",
|
"../../test:test_support",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -713,6 +713,7 @@ if (rtc_include_tests) {
|
|||||||
"../../rtc_base:protobuf_utils",
|
"../../rtc_base:protobuf_utils",
|
||||||
"../../rtc_base:rtc_base_approved",
|
"../../rtc_base:rtc_base_approved",
|
||||||
"../../system_wrappers",
|
"../../system_wrappers",
|
||||||
|
"../../test:perf_test",
|
||||||
"../../test:test_support",
|
"../../test:test_support",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -146,6 +146,7 @@ if (rtc_include_tests) {
|
|||||||
"../../rtc_base:rtc_numerics",
|
"../../rtc_base:rtc_numerics",
|
||||||
"../../system_wrappers",
|
"../../system_wrappers",
|
||||||
"../../system_wrappers:field_trial_api",
|
"../../system_wrappers:field_trial_api",
|
||||||
|
"../../test:perf_test",
|
||||||
"../../test:test_support",
|
"../../test:test_support",
|
||||||
"../../voice_engine",
|
"../../voice_engine",
|
||||||
"../bitrate_controller",
|
"../bitrate_controller",
|
||||||
|
@ -109,7 +109,7 @@ int main(int argc, char* argv[]) {
|
|||||||
rtc::SSLStreamAdapter::enable_time_callback_for_testing();
|
rtc::SSLStreamAdapter::enable_time_callback_for_testing();
|
||||||
|
|
||||||
#if defined(WEBRTC_IOS)
|
#if defined(WEBRTC_IOS)
|
||||||
rtc::test::InitTestSuite(RUN_ALL_TESTS, argc, argv);
|
rtc::test::InitTestSuite(RUN_ALL_TESTS, argc, argv, false);
|
||||||
rtc::test::RunTestsFromIOSApp();
|
rtc::test::RunTestsFromIOSApp();
|
||||||
#endif
|
#endif
|
||||||
const int res = RUN_ALL_TESTS();
|
const int res = RUN_ALL_TESTS();
|
||||||
|
@ -113,6 +113,19 @@ rtc_source_set("field_trial") {
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
rtc_source_set("perf_test") {
|
||||||
|
testonly = true
|
||||||
|
sources = [
|
||||||
|
"testsupport/perf_test.cc",
|
||||||
|
"testsupport/perf_test.h",
|
||||||
|
]
|
||||||
|
deps = [
|
||||||
|
"..:webrtc_common",
|
||||||
|
"../api:array_view",
|
||||||
|
"../rtc_base:rtc_base_approved",
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
if (is_ios) {
|
if (is_ios) {
|
||||||
rtc_source_set("test_support_objc") {
|
rtc_source_set("test_support_objc") {
|
||||||
testonly = true
|
testonly = true
|
||||||
@ -122,6 +135,7 @@ if (is_ios) {
|
|||||||
"ios/test_support.mm",
|
"ios/test_support.mm",
|
||||||
]
|
]
|
||||||
deps = [
|
deps = [
|
||||||
|
":perf_test",
|
||||||
"../sdk:common_objc",
|
"../sdk:common_objc",
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@ -135,8 +149,6 @@ rtc_source_set("test_support") {
|
|||||||
"gtest.h",
|
"gtest.h",
|
||||||
"testsupport/packet_reader.cc",
|
"testsupport/packet_reader.cc",
|
||||||
"testsupport/packet_reader.h",
|
"testsupport/packet_reader.h",
|
||||||
"testsupport/perf_test.cc",
|
|
||||||
"testsupport/perf_test.h",
|
|
||||||
"testsupport/unittest_utils.h",
|
"testsupport/unittest_utils.h",
|
||||||
]
|
]
|
||||||
|
|
||||||
@ -188,6 +200,7 @@ if (rtc_include_tests) {
|
|||||||
]
|
]
|
||||||
deps = [
|
deps = [
|
||||||
":field_trial",
|
":field_trial",
|
||||||
|
":perf_test",
|
||||||
"../rtc_base:rtc_base_approved",
|
"../rtc_base:rtc_base_approved",
|
||||||
"../system_wrappers:metrics_default",
|
"../system_wrappers:metrics_default",
|
||||||
"//testing/gmock",
|
"//testing/gmock",
|
||||||
@ -287,6 +300,7 @@ if (rtc_include_tests) {
|
|||||||
rtc_test("test_support_unittests") {
|
rtc_test("test_support_unittests") {
|
||||||
deps = [
|
deps = [
|
||||||
":fake_audio_device",
|
":fake_audio_device",
|
||||||
|
":perf_test",
|
||||||
":rtp_test_utils",
|
":rtp_test_utils",
|
||||||
"../api:video_frame_api",
|
"../api:video_frame_api",
|
||||||
"../api:video_frame_api_i420",
|
"../api:video_frame_api_i420",
|
||||||
|
@ -17,7 +17,8 @@ namespace test {
|
|||||||
// This is necessary as iOS doesn't like processes without a gui
|
// This is necessary as iOS doesn't like processes without a gui
|
||||||
// running for longer than a few seconds.
|
// running for longer than a few seconds.
|
||||||
void RunTestsFromIOSApp();
|
void RunTestsFromIOSApp();
|
||||||
void InitTestSuite(int (*test_suite)(void), int argc, char* argv[]);
|
void InitTestSuite(int (*test_suite)(void), int argc, char* argv[],
|
||||||
|
bool save_chartjson_result);
|
||||||
|
|
||||||
} // namespace test
|
} // namespace test
|
||||||
} // namespace rtc
|
} // namespace rtc
|
||||||
|
@ -11,8 +11,10 @@
|
|||||||
#import <UIKit/UIKit.h>
|
#import <UIKit/UIKit.h>
|
||||||
|
|
||||||
#include "test/ios/test_support.h"
|
#include "test/ios/test_support.h"
|
||||||
|
#include "test/testsupport/perf_test.h"
|
||||||
|
|
||||||
#import "sdk/objc/Framework/Classes/Common/RTCUIApplicationStatusObserver.h"
|
#import "sdk/objc/Framework/Classes/Common/RTCUIApplicationStatusObserver.h"
|
||||||
|
#include "sdk/objc/Framework/Classes/Common/helpers.h"
|
||||||
|
|
||||||
// Springboard will kill any iOS app that fails to check in after launch within
|
// Springboard will kill any iOS app that fails to check in after launch within
|
||||||
// a given time. Starting a UIApplication before invoking TestSuite::Run
|
// a given time. Starting a UIApplication before invoking TestSuite::Run
|
||||||
@ -31,6 +33,7 @@
|
|||||||
static int (*g_test_suite)(void) = NULL;
|
static int (*g_test_suite)(void) = NULL;
|
||||||
static int g_argc;
|
static int g_argc;
|
||||||
static char **g_argv;
|
static char **g_argv;
|
||||||
|
static bool g_save_chartjson_result;
|
||||||
|
|
||||||
@interface UIApplication (Testing)
|
@interface UIApplication (Testing)
|
||||||
- (void)_terminateWithStatus:(int)status;
|
- (void)_terminateWithStatus:(int)status;
|
||||||
@ -75,6 +78,20 @@ static char **g_argv;
|
|||||||
- (void)runTests {
|
- (void)runTests {
|
||||||
int exitStatus = g_test_suite();
|
int exitStatus = g_test_suite();
|
||||||
|
|
||||||
|
if (g_save_chartjson_result) {
|
||||||
|
// Stores data into a json file under the app's document directory.
|
||||||
|
NSString* fileName = @"perf_result.json";
|
||||||
|
NSArray<NSString*>* outputDirectories = NSSearchPathForDirectoriesInDomains(
|
||||||
|
NSDocumentDirectory, NSUserDomainMask, YES);
|
||||||
|
if ([outputDirectories count] != 0) {
|
||||||
|
NSString* outputPath =
|
||||||
|
[outputDirectories[0] stringByAppendingPathComponent:fileName];
|
||||||
|
|
||||||
|
webrtc::test::WritePerfResults(
|
||||||
|
webrtc::ios::StdStringFromNSString(outputPath));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// If a test app is too fast, it will exit before Instruments has has a
|
// If a test app is too fast, it will exit before Instruments has has a
|
||||||
// a chance to initialize and no test results will be seen.
|
// a chance to initialize and no test results will be seen.
|
||||||
// TODO(crbug.com/137010): Figure out how much time is actually needed, and
|
// TODO(crbug.com/137010): Figure out how much time is actually needed, and
|
||||||
@ -93,10 +110,14 @@ static char **g_argv;
|
|||||||
namespace rtc {
|
namespace rtc {
|
||||||
namespace test {
|
namespace test {
|
||||||
|
|
||||||
void InitTestSuite(int (*test_suite)(void), int argc, char *argv[]) {
|
// Note: This is not thread safe, and must be called from the same thread as
|
||||||
|
// runTests above.
|
||||||
|
void InitTestSuite(int (*test_suite)(void), int argc, char *argv[],
|
||||||
|
bool save_chartjson_result) {
|
||||||
g_test_suite = test_suite;
|
g_test_suite = test_suite;
|
||||||
g_argc = argc;
|
g_argc = argc;
|
||||||
g_argv = argv;
|
g_argv = argv;
|
||||||
|
g_save_chartjson_result = save_chartjson_result;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RunTestsFromIOSApp() {
|
void RunTestsFromIOSApp() {
|
||||||
|
@ -8,8 +8,6 @@
|
|||||||
* be found in the AUTHORS file in the root of the source tree.
|
* be found in the AUTHORS file in the root of the source tree.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <fstream>
|
|
||||||
|
|
||||||
#include "rtc_base/flags.h"
|
#include "rtc_base/flags.h"
|
||||||
#include "rtc_base/logging.h"
|
#include "rtc_base/logging.h"
|
||||||
#include "system_wrappers/include/metrics_default.h"
|
#include "system_wrappers/include/metrics_default.h"
|
||||||
@ -26,6 +24,24 @@ DEFINE_string(NSTreatUnknownArgumentsAsOpen, "",
|
|||||||
"Intentionally ignored flag intended for iOS simulator.");
|
"Intentionally ignored flag intended for iOS simulator.");
|
||||||
DEFINE_string(ApplePersistenceIgnoreState, "",
|
DEFINE_string(ApplePersistenceIgnoreState, "",
|
||||||
"Intentionally ignored flag intended for iOS simulator.");
|
"Intentionally ignored flag intended for iOS simulator.");
|
||||||
|
DEFINE_bool(
|
||||||
|
save_chartjson_result,
|
||||||
|
false,
|
||||||
|
"Store the perf results in Documents/perf_result.json in the format "
|
||||||
|
"described by "
|
||||||
|
"https://github.com/catapult-project/catapult/blob/master/dashboard/docs/"
|
||||||
|
"data-format.md.");
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
DEFINE_string(
|
||||||
|
chartjson_result_file,
|
||||||
|
"",
|
||||||
|
"Path where the perf results should be stored in the JSON format described "
|
||||||
|
"by "
|
||||||
|
"https://github.com/catapult-project/catapult/blob/master/dashboard/docs/"
|
||||||
|
"data-format.md.");
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
DEFINE_bool(logs, false, "print logs to stderr");
|
DEFINE_bool(logs, false, "print logs to stderr");
|
||||||
@ -35,13 +51,6 @@ DEFINE_string(force_fieldtrials, "",
|
|||||||
"E.g. running with --force_fieldtrials=WebRTC-FooFeature/Enable/"
|
"E.g. running with --force_fieldtrials=WebRTC-FooFeature/Enable/"
|
||||||
" will assign the group Enable to field trial WebRTC-FooFeature.");
|
" will assign the group Enable to field trial WebRTC-FooFeature.");
|
||||||
|
|
||||||
DEFINE_string(
|
|
||||||
chartjson_result_file,
|
|
||||||
"",
|
|
||||||
"Path where the perf results should be stored it the JSON format described "
|
|
||||||
"by "
|
|
||||||
"https://github.com/catapult-project/catapult/blob/master/dashboard/docs/"
|
|
||||||
"data-format.md.");
|
|
||||||
|
|
||||||
DEFINE_bool(help, false, "Print this message.");
|
DEFINE_bool(help, false, "Print this message.");
|
||||||
|
|
||||||
@ -66,21 +75,25 @@ int main(int argc, char* argv[]) {
|
|||||||
webrtc::test::InitFieldTrialsFromString(fieldtrials);
|
webrtc::test::InitFieldTrialsFromString(fieldtrials);
|
||||||
webrtc::metrics::Enable();
|
webrtc::metrics::Enable();
|
||||||
|
|
||||||
|
|
||||||
rtc::LogMessage::SetLogToStderr(FLAG_logs);
|
rtc::LogMessage::SetLogToStderr(FLAG_logs);
|
||||||
|
|
||||||
#if defined(WEBRTC_IOS)
|
#if defined(WEBRTC_IOS)
|
||||||
rtc::test::InitTestSuite(RUN_ALL_TESTS, argc, argv);
|
|
||||||
|
rtc::test::InitTestSuite(RUN_ALL_TESTS, argc, argv,
|
||||||
|
FLAG_save_chartjson_result);
|
||||||
rtc::test::RunTestsFromIOSApp();
|
rtc::test::RunTestsFromIOSApp();
|
||||||
#endif
|
|
||||||
|
#else
|
||||||
|
|
||||||
int exit_code = RUN_ALL_TESTS();
|
int exit_code = RUN_ALL_TESTS();
|
||||||
|
|
||||||
std::string chartjson_result_file = FLAG_chartjson_result_file;
|
std::string chartjson_result_file = FLAG_chartjson_result_file;
|
||||||
if (chartjson_result_file != "") {
|
if (chartjson_result_file != "") {
|
||||||
std::string json_results = webrtc::test::GetPerfResultsJSON();
|
webrtc::test::WritePerfResults(chartjson_result_file);
|
||||||
std::fstream json_file(chartjson_result_file, std::fstream::out);
|
|
||||||
json_file << json_results;
|
|
||||||
json_file.close();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return exit_code;
|
return exit_code;
|
||||||
|
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
#include "rtc_base/criticalsection.h"
|
#include "rtc_base/criticalsection.h"
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <fstream>
|
||||||
#include <map>
|
#include <map>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
@ -154,6 +155,13 @@ std::string GetPerfResultsJSON() {
|
|||||||
return GetPerfResultsLogger().ToJSON();
|
return GetPerfResultsLogger().ToJSON();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void WritePerfResults(const std::string& output_path) {
|
||||||
|
std::string json_results = GetPerfResultsJSON();
|
||||||
|
std::fstream json_file(output_path, std::fstream::out);
|
||||||
|
json_file << json_results;
|
||||||
|
json_file.close();
|
||||||
|
}
|
||||||
|
|
||||||
void PrintResult(const std::string& measurement,
|
void PrintResult(const std::string& measurement,
|
||||||
const std::string& modifier,
|
const std::string& modifier,
|
||||||
const std::string& trace,
|
const std::string& trace,
|
||||||
|
@ -61,8 +61,10 @@ void PrintResultList(const std::string& measurement,
|
|||||||
const std::string& units,
|
const std::string& units,
|
||||||
bool important);
|
bool important);
|
||||||
|
|
||||||
// Get all perf results to date in a JSON format as described in
|
// Write all perf results to date to a JSON file formatted as described in
|
||||||
// https://github.com/catapult-project/catapult/blob/master/dashboard/docs/data-format.md
|
// https://github.com/catapult-project/catapult/blob/master/dashboard/docs/data-format.md
|
||||||
|
void WritePerfResults(const std::string& output_path);
|
||||||
|
|
||||||
std::string GetPerfResultsJSON();
|
std::string GetPerfResultsJSON();
|
||||||
|
|
||||||
// You shouldn't use this function. It's only used to test the functions above.
|
// You shouldn't use this function. It's only used to test the functions above.
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
{
|
{
|
||||||
"app": "webrtc_perf_tests",
|
"app": "webrtc_perf_tests",
|
||||||
"test args": [
|
"test args": [
|
||||||
"--perf_results_json_path=Documents/perf_result.json"
|
"--save_chartjson_result"
|
||||||
],
|
],
|
||||||
"bot_id": "build15-a7",
|
"bot_id": "build15-a7",
|
||||||
"pool": "WebRTC"
|
"pool": "WebRTC"
|
||||||
|
@ -2,6 +2,10 @@
|
|||||||
"tests": [
|
"tests": [
|
||||||
{
|
{
|
||||||
"app": "webrtc_perf_tests",
|
"app": "webrtc_perf_tests",
|
||||||
|
"test args": [
|
||||||
|
"--gtest_filter=AudioEncoderOpusComplexityAdaptationTest.AdaptationOn",
|
||||||
|
"--save_chartjson_result"
|
||||||
|
],
|
||||||
"bot_id": "build16-a7",
|
"bot_id": "build16-a7",
|
||||||
"pool": "WebRTC"
|
"pool": "WebRTC"
|
||||||
}
|
}
|
||||||
|
@ -298,6 +298,7 @@ if (rtc_include_tests) {
|
|||||||
"../system_wrappers:metrics_default",
|
"../system_wrappers:metrics_default",
|
||||||
"../test:direct_transport",
|
"../test:direct_transport",
|
||||||
"../test:field_trial",
|
"../test:field_trial",
|
||||||
|
"../test:perf_test",
|
||||||
"../test:rtp_test_utils",
|
"../test:rtp_test_utils",
|
||||||
"../test:test_common",
|
"../test:test_common",
|
||||||
"../test:test_support",
|
"../test:test_support",
|
||||||
|
Reference in New Issue
Block a user