From ee37fed641950235d2cbbfd7c6185ed763e0f6af Mon Sep 17 00:00:00 2001 From: Jelle Foks Date: Fri, 9 Aug 2024 16:30:14 -0700 Subject: [PATCH 1/5] Better error logging --- starboard/shared/posix/socket_bind.cc | 3 ++- starboard/shared/posix/socket_connect.cc | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/starboard/shared/posix/socket_bind.cc b/starboard/shared/posix/socket_bind.cc index 42f83352de0c..76e82736350e 100644 --- a/starboard/shared/posix/socket_bind.cc +++ b/starboard/shared/posix/socket_bind.cc @@ -15,6 +15,7 @@ #include "starboard/common/socket.h" #include +#include #include #include "starboard/common/log.h" @@ -63,7 +64,7 @@ SbSocketError SbSocketBind(SbSocket socket, int result = HANDLE_EINTR( bind(socket->socket_fd, sock_addr.sockaddr(), sock_addr.length)); if (result != 0) { - SB_LOG(ERROR) << __FUNCTION__ << ": Bind failed. errno=" << errno; + SB_LOG(ERROR) << __FUNCTION__ << ": Bind failed. errno=" << strerror(errno); return (socket->error = sbposix::TranslateSocketErrno(errno)); } diff --git a/starboard/shared/posix/socket_connect.cc b/starboard/shared/posix/socket_connect.cc index aa47dea3f013..c279eeacaaef 100644 --- a/starboard/shared/posix/socket_connect.cc +++ b/starboard/shared/posix/socket_connect.cc @@ -15,6 +15,7 @@ #include "starboard/common/socket.h" #include +#include #include #include "starboard/common/log.h" @@ -49,7 +50,7 @@ SbSocketError SbSocketConnect(SbSocket socket, const SbSocketAddress* address) { } if (result != 0) { - SB_LOG(ERROR) << __FUNCTION__ << ": connect failed: " << errno; + SB_LOG(ERROR) << __FUNCTION__ << ": connect failed: " << strerror(errno); return (socket->error = kSbSocketErrorFailed); } From e3afec13377c9ab60a0dad3e7dcc424f7d40f462 Mon Sep 17 00:00:00 2001 From: Jelle Foks Date: Fri, 9 Aug 2024 16:29:56 -0700 Subject: [PATCH 2/5] Quiet down missing CSP header warning --- cobalt/web/csp_delegate.cc | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/cobalt/web/csp_delegate.cc b/cobalt/web/csp_delegate.cc index 92d052097c1a..b37b63d947ec 100644 --- a/cobalt/web/csp_delegate.cc +++ b/cobalt/web/csp_delegate.cc @@ -80,8 +80,10 @@ bool CspDelegateSecure::CanLoad(ResourceType type, const GURL& url, if (csp_header_policy_ == csp::kCSPRequired || should_allow) { return should_allow; } else { - LOG(WARNING) << "Page must include Content-Security-Policy header, it " - "will fail to load in production builds of Cobalt!"; + if (type == kLocation) { + LOG(WARNING) << "Page must include Content-Security-Policy header, it " + "will fail to load in production builds of Cobalt!"; + } } } From 22876d1b74a4a5bf0422a7a808b4c597975607d2 Mon Sep 17 00:00:00 2001 From: Jelle Foks Date: Fri, 9 Aug 2024 11:20:29 -0700 Subject: [PATCH 3/5] Log negotiated protocol --- net/http/http_stream_factory_job.h | 1 + net/http/http_stream_factory_job_controller.cc | 11 +++++++++++ 2 files changed, 12 insertions(+) diff --git a/net/http/http_stream_factory_job.h b/net/http/http_stream_factory_job.h index 7938f9210ffe..80d6c4de79e9 100644 --- a/net/http/http_stream_factory_job.h +++ b/net/http/http_stream_factory_job.h @@ -221,6 +221,7 @@ class HttpStreamFactory::Job { void SetPriority(RequestPriority priority); + const GURL& origin_url() const { return origin_url_; } RequestPriority priority() const { return priority_; } bool was_alpn_negotiated() const; NextProto negotiated_protocol() const; diff --git a/net/http/http_stream_factory_job_controller.cc b/net/http/http_stream_factory_job_controller.cc index 1182cfe96ef8..3a5d2635b586 100644 --- a/net/http/http_stream_factory_job_controller.cc +++ b/net/http/http_stream_factory_job_controller.cc @@ -255,6 +255,17 @@ void HttpStreamFactory::JobController::OnStreamReady( std::unique_ptr stream = job->ReleaseStream(); DCHECK(stream); + { + const char* jobtypename[] = {"main", "alternative", "dns_alpn_h3", "preconnect", + "preconnect_dns_alpn_h3"}; + LOG(INFO) << __FUNCTION__ << " negotiated_protocol = " + << NextProtoToString(job->negotiated_protocol()) + << " was_alpn_negotiated=" << job->was_alpn_negotiated() + << " using_spdy=" << job->using_spdy() + << " using_quic=" << job->using_quic() + << " job_type=" << jobtypename[(int)job->job_type()] << " " + << job->origin_url().spec(); + } MarkRequestComplete(job->was_alpn_negotiated(), job->negotiated_protocol(), job->using_spdy()); From a4aa9f527381f839b0e92e63deb6183d5b8f8bd6 Mon Sep 17 00:00:00 2001 From: Jelle Foks Date: Fri, 9 Aug 2024 12:51:16 -0700 Subject: [PATCH 4/5] NoStrip and profileable --- starboard/android/apk/app/build.gradle | 4 ++++ starboard/android/apk/app/src/app/AndroidManifest.xml | 2 ++ 2 files changed, 6 insertions(+) diff --git a/starboard/android/apk/app/build.gradle b/starboard/android/apk/app/build.gradle index 42cd8f99b736..c8f5cfaa8fb9 100644 --- a/starboard/android/apk/app/build.gradle +++ b/starboard/android/apk/app/build.gradle @@ -174,6 +174,10 @@ android { } } packagingOptions { + doNotStrip "*/arm64-v8a/*.so" + doNotStrip "*/armeabi-v7a/*.so" + doNotStrip "*/x86/*.so" + doNotStrip "*/x86_64/*.so" jniLibs { // extractNativeLibs, which we set, based on evergreenCompatible, in the manifest file, // is deprecated. Gradle asks that useLegacyPackaging be set if extractNativeLibs is diff --git a/starboard/android/apk/app/src/app/AndroidManifest.xml b/starboard/android/apk/app/src/app/AndroidManifest.xml index 0c23b475dceb..d199f577b30e 100644 --- a/starboard/android/apk/app/src/app/AndroidManifest.xml +++ b/starboard/android/apk/app/src/app/AndroidManifest.xml @@ -78,6 +78,8 @@ android:exported="false" android:foregroundServiceType="mediaPlayback"/> + + . From ccfd90a68dce51a931e6e89fa9ebbf9c2c8332ab Mon Sep 17 00:00:00 2001 From: Jelle Foks Date: Fri, 16 Aug 2024 12:35:58 -0700 Subject: [PATCH 5/5] Log thread and process CPU time --- base/logging.cc | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/base/logging.cc b/base/logging.cc index 5a159ff4f3a0..0d451285f6c6 100644 --- a/base/logging.cc +++ b/base/logging.cc @@ -5,6 +5,7 @@ #include "base/logging.h" #include +#include #include "base/macros.h" #include "base/trace_event/trace_event.h" @@ -125,6 +126,30 @@ typedef pthread_mutex_t* MutexHandle; namespace logging { +namespace { +std::string print_rusage(int who, + const char* prefix = "", + const char* postfix = "") { + struct rusage usage; + if (getrusage(who, &usage) != -1) { + return starboard::FormatString( + "%s(CPU:u%ld.%03ld+s%ld=%ld.%03ld,FLT:%ld+%ld,CTX:%ld+%ld)%s", prefix, + usage.ru_utime.tv_sec, usage.ru_utime.tv_usec / 1000, + usage.ru_stime.tv_sec, usage.ru_stime.tv_usec / 1000, + ((usage.ru_utime.tv_sec + usage.ru_stime.tv_sec) * 1000000 + + (usage.ru_utime.tv_usec + usage.ru_stime.tv_usec)) / 1000, + usage.ru_minflt, usage.ru_majflt, usage.ru_nvcsw, usage.ru_nivcsw, + postfix); + } + return std::string(strerror(errno)); +} + +std::string print_stats() { + return print_rusage(RUSAGE_THREAD, "(", "/") + + print_rusage(RUSAGE_SELF, "", ")"); +} +} // namespace + namespace { VlogInfo* g_vlog_info = nullptr; @@ -1040,7 +1065,8 @@ void LogMessage::Init(const char* file, int line) { stream_ << CurrentProcessId() << ':'; #endif if (g_log_thread_id) - stream_ << base::PlatformThread::GetName() << '/' << base::PlatformThread::CurrentId() << ":"; + stream_ << base::PlatformThread::GetName() << '/' + << base::PlatformThread::CurrentId() << "/" << print_stats() << ":"; if (g_log_timestamp) { #if defined(STARBOARD) EzTimeValue time_value;