Avoid composing the message + recipient name for crash logs until a failure actually...
authortimothy_horton@apple.com <timothy_horton@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 11 Nov 2017 09:24:45 +0000 (09:24 +0000)
committertimothy_horton@apple.com <timothy_horton@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 11 Nov 2017 09:24:45 +0000 (09:24 +0000)
https://bugs.webkit.org/show_bug.cgi?id=179576

Reviewed by Dan Bernstein.

* Platform/IPC/mac/ConnectionMac.mm:
(IPC::Connection::sendMessage):
(IPC::Connection::sendOutgoingMessage):
* Platform/IPC/mac/MachMessage.h:
(IPC::MachMessage::messageReceiverName const):
(IPC::MachMessage::setMessageReceiverName):
(IPC::MachMessage::messageName const):
(IPC::MachMessage::setMessageName):
Store the message name and receiver name separately on MachMessage,
only composing them into a string if the message is unhandled. This
makes the time spent composing the string in sendOutgoingMessage
completely disappear. In absolute terms, it wasn't huge, but if you
do enough IPC it starts to add up.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@224728 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebKit/ChangeLog
Source/WebKit/Platform/IPC/mac/ConnectionMac.mm
Source/WebKit/Platform/IPC/mac/MachMessage.h

index 16753b9..f848252 100644 (file)
@@ -1,3 +1,24 @@
+2017-11-11  Tim Horton  <timothy_horton@apple.com>
+
+        Avoid composing the message + recipient name for crash logs until a failure actually occurs
+        https://bugs.webkit.org/show_bug.cgi?id=179576
+
+        Reviewed by Dan Bernstein.
+
+        * Platform/IPC/mac/ConnectionMac.mm:
+        (IPC::Connection::sendMessage):
+        (IPC::Connection::sendOutgoingMessage):
+        * Platform/IPC/mac/MachMessage.h:
+        (IPC::MachMessage::messageReceiverName const):
+        (IPC::MachMessage::setMessageReceiverName):
+        (IPC::MachMessage::messageName const):
+        (IPC::MachMessage::setMessageName):
+        Store the message name and receiver name separately on MachMessage,
+        only composing them into a string if the message is unhandled. This
+        makes the time spent composing the string in sendOutgoingMessage
+        completely disappear. In absolute terms, it wasn't huge, but if you
+        do enough IPC it starts to add up.
+
 2017-11-10  Chris Dumez  <cdumez@apple.com>
 
         [Service Workers] Implement "Try Activate" / "Activate" algorithms
index 689e281..fd32860 100644 (file)
@@ -247,7 +247,7 @@ bool Connection::sendMessage(std::unique_ptr<MachMessage> message)
         return false;
 
     default:
-        WebKit::setCrashReportApplicationSpecificInformation((CFStringRef)[NSString stringWithFormat:@"Unhandled error code %x, message '%@'", kr, message->messageName()]);
+        WebKit::setCrashReportApplicationSpecificInformation((CFStringRef)[NSString stringWithFormat:@"Unhandled error code %x, message '%s::%s'", kr, message->messageReceiverName().data(), message->messageName().data()]);
         CRASH();
     }
 }
@@ -282,7 +282,9 @@ bool Connection::sendOutgoingMessage(std::unique_ptr<Encoder> encoder)
     }
 
     auto message = MachMessage::create(messageSize);
-    message->setMessageName((__bridge CFStringRef)[NSString stringWithFormat:@"%s:%s:", encoder->messageReceiverName().toString().data(), encoder->messageName().toString().data()]);
+
+    message->setMessageReceiverName(encoder->messageReceiverName().toString());
+    message->setMessageName(encoder->messageName().toString());
 
     bool isComplex = (numberOfPortDescriptors + numberOfOOLMemoryDescriptors) > 0;
 
index 1de66f6..f8ba210 100644 (file)
@@ -26,7 +26,7 @@
 #pragma once
 
 #include <memory>
-#include <wtf/RetainPtr.h>
+#include <wtf/text/CString.h>
 
 namespace IPC {
 
@@ -43,13 +43,17 @@ public:
 
     void leakDescriptors();
 
-    CFStringRef messageName() const { return m_messageName.get(); }
-    void setMessageName(CFStringRef messageName) { m_messageName = messageName; }
+    const CString& messageReceiverName() const { return m_messageReceiverName; }
+    void setMessageReceiverName(const CString& messageReceiverName) { m_messageReceiverName = messageReceiverName; }
+
+    const CString& messageName() const { return m_messageName; }
+    void setMessageName(const CString& messageName) { m_messageName = messageName; }
 
 private:
     explicit MachMessage(size_t);
 
-    RetainPtr<CFStringRef> m_messageName;
+    CString m_messageReceiverName;
+    CString m_messageName;
     size_t m_size;
     bool m_shouldFreeDescriptors;
     uint8_t m_buffer[0];