Index: content/browser/renderer_host/render_message_filter.cc |
diff --git a/content/browser/renderer_host/render_message_filter.cc b/content/browser/renderer_host/render_message_filter.cc |
index 9e2aa1c63738e4396a14e26bb2b503987dfa7b76..1c6b5d7efa5f90530949ce2fbbc59c7839449657 100644 |
--- a/content/browser/renderer_host/render_message_filter.cc |
+++ b/content/browser/renderer_host/render_message_filter.cc |
@@ -89,6 +89,11 @@ |
#include "ui/accelerated_widget_mac/window_resize_helper_mac.h" |
#endif |
+#if defined(OS_LINUX) |
+#include "base/linux_util.h" |
+#include "base/threading/platform_thread.h" |
+#endif |
+ |
namespace content { |
namespace { |
@@ -204,6 +209,10 @@ bool RenderMessageFilter::OnMessageReceived(const IPC::Message& message) { |
OnAllocateLockedDiscardableSharedMemory) |
IPC_MESSAGE_HANDLER(ChildProcessHostMsg_DeletedDiscardableSharedMemory, |
OnDeletedDiscardableSharedMemory) |
+#if defined(OS_LINUX) |
+ IPC_MESSAGE_HANDLER(ChildProcessHostMsg_SetThreadPriority, |
+ OnSetThreadPriority) |
+#endif |
IPC_MESSAGE_HANDLER_DELAY_REPLY(RenderProcessHostMsg_Keygen, OnKeygen) |
IPC_MESSAGE_HANDLER(RenderProcessHostMsg_DidGenerateCacheableMetadata, |
OnCacheableMetadataAvailable) |
@@ -414,6 +423,35 @@ void RenderMessageFilter::OnDeletedDiscardableSharedMemory( |
this, id)); |
} |
+#if defined(OS_LINUX) |
+void RenderMessageFilter::SetThreadPriorityOnFileThread( |
+ base::PlatformThreadId ns_tid, |
+ base::ThreadPriority priority) { |
+ bool ns_pid_supported = false; |
+ pid_t peer_tid = base::FindThreadID(peer_pid(), ns_tid, &ns_pid_supported); |
+ if (peer_tid == -1) { |
+ if (ns_pid_supported) |
+ DLOG(WARNING) << "Could not find tid"; |
+ return; |
+ } |
+ |
+ if (peer_tid == peer_pid()) { |
+ DLOG(WARNING) << "Changing priority of main thread is not allowed"; |
+ return; |
+ } |
+ |
+ base::PlatformThread::SetThreadPriority(peer_tid, priority); |
+} |
+ |
+void RenderMessageFilter::OnSetThreadPriority(base::PlatformThreadId ns_tid, |
+ base::ThreadPriority priority) { |
+ BrowserThread::PostTask( |
+ BrowserThread::FILE_USER_BLOCKING, FROM_HERE, |
+ base::Bind(&RenderMessageFilter::SetThreadPriorityOnFileThread, this, |
+ ns_tid, priority)); |
+} |
+#endif |
+ |
void RenderMessageFilter::OnCacheableMetadataAvailable( |
const GURL& url, |
base::Time expected_response_time, |