VirtualBox

Changeset 103562 in vbox


Ignore:
Timestamp:
Feb 26, 2024 10:01:30 AM (9 months ago)
Author:
vboxsync
Message:

libs/xpcom/ipc: Replace the old ipcMessageReader helper class with an inline version to avoid function calls in hot code paths, bugref:10597

Location:
trunk/src/libs/xpcom18a4
Files:
1 added
2 deleted
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/libs/xpcom18a4/Makefile.kmk

    r103533 r103562  
    292292IPCD-HEADERS_SOURCES = \
    293293        ipc/ipcd/client/public/ipcCID.h \
    294         ipc/ipcd/util/public/ipcMessageReader.h \
    295294        ipc/ipcd/util/public/ipcMessageWriter.h \
    296295        ipc/ipcd/client/public/ipcdclient.h
     
    815814        ipc/ipcd/extensions/dconnect/src/ipcDConnectService.cpp \
    816815        \
    817         ipc/ipcd/util/src/ipcMessageReader.cpp \
    818816        ipc/ipcd/util/src/ipcMessageWriter.cpp \
    819817        \
  • trunk/src/libs/xpcom18a4/ipc/ipcd/extensions/dconnect/src/ipcDConnectService.cpp

    r103536 r103562  
    3939#include "ipcDConnectService.h"
    4040#include "ipcMessageWriter.h"
    41 #include "ipcMessageReader.h"
     41#include "ipcMsgReader.h"
    4242
    4343#include "nsIServiceManagerUtils.h"
     
    452452
    453453static nsresult
    454 DeserializeParam(ipcMessageReader &reader, const nsXPTType &t, nsXPTCVariant &v)
     454DeserializeParam(PIPCMSGREADER pMsgReader, const nsXPTType &t, nsXPTCVariant &v)
    455455{
    456456  // defaults
     
    463463    case nsXPTType::T_I8:
    464464    case nsXPTType::T_U8:
    465       v.val.u8 = reader.GetInt8();
     465      v.val.u8 = IPCMsgReaderGetU8(pMsgReader);
    466466      break;
    467467
    468468    case nsXPTType::T_I16:
    469469    case nsXPTType::T_U16:
    470       v.val.u16 = reader.GetInt16();
     470      v.val.u16 = IPCMsgReaderGetU16(pMsgReader);
    471471      break;
    472472
    473473    case nsXPTType::T_I32:
    474474    case nsXPTType::T_U32:
    475       v.val.u32 = reader.GetInt32();
     475      v.val.u32 = IPCMsgReaderGetU32(pMsgReader);
    476476      break;
    477477
    478478    case nsXPTType::T_I64:
    479479    case nsXPTType::T_U64:
    480       reader.GetBytes(&v.val.u64, sizeof(v.val.u64));
     480      v.val.u64 = IPCMsgReaderGetU64(pMsgReader);
    481481      break;
    482482
    483483    case nsXPTType::T_FLOAT:
    484       reader.GetBytes(&v.val.f, sizeof(v.val.f));
     484      IPCMsgReaderReadBytes(pMsgReader, &v.val.f, sizeof(v.val.f));
    485485      break;
    486486
    487487    case nsXPTType::T_DOUBLE:
    488       reader.GetBytes(&v.val.d, sizeof(v.val.d));
     488      IPCMsgReaderReadBytes(pMsgReader, &v.val.d, sizeof(v.val.d));
    489489      break;
    490490
    491491    case nsXPTType::T_BOOL:
    492       reader.GetBytes(&v.val.b, sizeof(v.val.b));
     492      IPCMsgReaderReadBytes(pMsgReader, &v.val.b, sizeof(v.val.b));
    493493      break;
    494494
    495495    case nsXPTType::T_CHAR:
    496       reader.GetBytes(&v.val.c, sizeof(v.val.c));
     496      IPCMsgReaderReadBytes(pMsgReader, &v.val.c, sizeof(v.val.c));
    497497      break;
    498498
    499499    case nsXPTType::T_WCHAR:
    500       reader.GetBytes(&v.val.wc, sizeof(v.val.wc));
     500      IPCMsgReaderReadBytes(pMsgReader, &v.val.wc, sizeof(v.val.wc));
    501501      break;
    502502
     
    504504      {
    505505        nsID *buf = (nsID *) nsMemory::Alloc(sizeof(nsID));
    506         reader.GetBytes(buf, sizeof(nsID));
     506        IPCMsgReaderReadBytes(pMsgReader, buf, sizeof(nsID));
    507507        v.val.p = buf;
    508508        v.SetValIsAllocated();
     
    512512    case nsXPTType::T_CHAR_STR:
    513513      {
    514         PRUint32 len = reader.GetInt32();
     514        PRUint32 len = IPCMsgReaderGetU32(pMsgReader);
    515515        if (len == (PRUint32) -1)
    516516        {
     
    521521        {
    522522          char *buf = (char *) nsMemory::Alloc(len + 1);
    523           reader.GetBytes(buf, len);
     523          IPCMsgReaderReadBytes(pMsgReader, buf, len);
    524524          buf[len] = char(0);
    525525
     
    532532    case nsXPTType::T_WCHAR_STR:
    533533      {
    534         PRUint32 len = reader.GetInt32();
     534        PRUint32 len = IPCMsgReaderGetU32(pMsgReader);
    535535        if (len == (PRUint32) -1)
    536536        {
     
    541541        {
    542542          PRUnichar *buf = (PRUnichar *) nsMemory::Alloc(len + 2);
    543           reader.GetBytes(buf, len);
     543          IPCMsgReaderReadBytes(pMsgReader, buf, len);
    544544          buf[len / 2] = PRUnichar(0);
    545545
     
    553553    case nsXPTType::T_INTERFACE_IS:
    554554      {
    555         reader.GetBytes(&v.val.u64, sizeof(DConAddr));
     555        IPCMsgReaderReadBytes(pMsgReader, &v.val.u64, sizeof(DConAddr));
    556556        // stub creation will be handled outside this routine.  we only
    557557        // deserialize the DConAddr into v.val.u64 temporarily.
     
    562562    case nsXPTType::T_DOMSTRING:
    563563      {
    564         PRUint32 len = reader.GetInt32();
     564        PRUint32 len = IPCMsgReaderGetU32(pMsgReader);
    565565
    566566        nsString *str = new nsString();
    567567        str->SetLength(len / 2);
    568568        PRUnichar *buf = str->BeginWriting();
    569         reader.GetBytes(buf, len);
     569        IPCMsgReaderReadBytes(pMsgReader, buf, len);
    570570
    571571        v.val.p = str;
     
    577577    case nsXPTType::T_CSTRING:
    578578      {
    579         PRUint32 len = reader.GetInt32();
     579        PRUint32 len = IPCMsgReaderGetU32(pMsgReader);
    580580
    581581        nsCString *str = new nsCString();
    582582        str->SetLength(len);
    583583        char *buf = str->BeginWriting();
    584         reader.GetBytes(buf, len);
     584        IPCMsgReaderReadBytes(pMsgReader, buf, len);
    585585
    586586        v.val.p = str;
     
    696696
    697697static nsresult
    698 DeserializeResult(ipcMessageReader &reader, const nsXPTType &t, nsXPTCMiniVariant &v)
     698DeserializeResult(PIPCMSGREADER pMsgReader, const nsXPTType &t, nsXPTCMiniVariant &v)
    699699{
    700700  if (v.val.p == nsnull)
     
    705705    case nsXPTType::T_I8:
    706706    case nsXPTType::T_U8:
    707       *((PRUint8 *) v.val.p) = reader.GetInt8();
     707      *((PRUint8 *) v.val.p) = IPCMsgReaderGetU8(pMsgReader);
    708708      break;
    709709
    710710    case nsXPTType::T_I16:
    711711    case nsXPTType::T_U16:
    712       *((PRUint16 *) v.val.p) = reader.GetInt16();
     712      *((PRUint16 *) v.val.p) = IPCMsgReaderGetU16(pMsgReader);
    713713      break;
    714714
    715715    case nsXPTType::T_I32:
    716716    case nsXPTType::T_U32:
    717       *((PRUint32 *) v.val.p) = reader.GetInt32();
     717      *((PRUint32 *) v.val.p) = IPCMsgReaderGetU32(pMsgReader);
    718718      break;
    719719
    720720    case nsXPTType::T_I64:
    721721    case nsXPTType::T_U64:
    722       reader.GetBytes(v.val.p, sizeof(PRUint64));
     722      *((PRUint64 *) v.val.p) = IPCMsgReaderGetU64(pMsgReader);
    723723      break;
    724724
    725725    case nsXPTType::T_FLOAT:
    726       reader.GetBytes(v.val.p, sizeof(float));
     726      IPCMsgReaderReadBytes(pMsgReader, v.val.p, sizeof(float));
    727727      break;
    728728
    729729    case nsXPTType::T_DOUBLE:
    730       reader.GetBytes(v.val.p, sizeof(double));
     730      IPCMsgReaderReadBytes(pMsgReader, v.val.p, sizeof(double));
    731731      break;
    732732
    733733    case nsXPTType::T_BOOL:
    734       reader.GetBytes(v.val.p, sizeof(PRBool));
     734      IPCMsgReaderReadBytes(pMsgReader, v.val.p, sizeof(PRBool));
    735735      break;
    736736
    737737    case nsXPTType::T_CHAR:
    738       reader.GetBytes(v.val.p, sizeof(char));
     738      IPCMsgReaderReadBytes(pMsgReader, v.val.p, sizeof(char));
    739739      break;
    740740
    741741    case nsXPTType::T_WCHAR:
    742       reader.GetBytes(v.val.p, sizeof(PRUnichar));
     742      IPCMsgReaderReadBytes(pMsgReader, v.val.p, sizeof(PRUnichar));
    743743      break;
    744744
     
    746746      {
    747747        nsID *buf = (nsID *) nsMemory::Alloc(sizeof(nsID));
    748         reader.GetBytes(buf, sizeof(nsID));
     748        IPCMsgReaderReadBytes(pMsgReader, buf, sizeof(nsID));
    749749        *((nsID **) v.val.p) = buf;
    750750      }
     
    753753    case nsXPTType::T_CHAR_STR:
    754754      {
    755         PRUint32 len = reader.GetInt32();
     755        PRUint32 len = IPCMsgReaderGetU32(pMsgReader);
    756756        if (len == (PRUint32) -1)
    757757        {
     
    766766        {
    767767          char *buf = (char *) nsMemory::Alloc(len + 1);
    768           reader.GetBytes(buf, len);
     768          IPCMsgReaderReadBytes(pMsgReader, buf, len);
    769769          buf[len] = char(0);
    770770
     
    776776    case nsXPTType::T_WCHAR_STR:
    777777      {
    778         PRUint32 len = reader.GetInt32();
     778        PRUint32 len = IPCMsgReaderGetU32(pMsgReader);
    779779        if (len == (PRUint32) -1)
    780780        {
     
    789789        {
    790790          PRUnichar *buf = (PRUnichar *) nsMemory::Alloc(len + 2);
    791           reader.GetBytes(buf, len);
     791          IPCMsgReaderReadBytes(pMsgReader, buf, len);
    792792          buf[len / 2] = PRUnichar(0);
    793793
     
    804804        // into v.val.p temporarily.  needs temporary memory alloc.
    805805        DConAddrPlusPtr *buf = (DConAddrPlusPtr *) nsMemory::Alloc(sizeof(DConAddrPlusPtr));
    806         reader.GetBytes(&buf->addr, sizeof(DConAddr));
     806        IPCMsgReaderReadBytes(pMsgReader, &buf->addr, sizeof(DConAddr));
    807807        buf->p = v.val.p;
    808808        v.val.p = buf;
     
    813813    case nsXPTType::T_DOMSTRING:
    814814      {
    815         PRUint32 len = reader.GetInt32();
     815        PRUint32 len = IPCMsgReaderGetU32(pMsgReader);
    816816
    817817        nsAString *str = (nsAString *) v.val.p;
     
    821821        str->BeginWriting(begin);
    822822
    823         reader.GetBytes(begin.get(), len);
     823        IPCMsgReaderReadBytes(pMsgReader, begin.get(), len);
    824824      }
    825825      break;
     
    828828    case nsXPTType::T_CSTRING:
    829829      {
    830         PRUint32 len = reader.GetInt32();
     830        PRUint32 len = IPCMsgReaderGetU32(pMsgReader);
    831831
    832832        nsACString *str = (nsACString *) v.val.p;
     
    836836        str->BeginWriting(begin);
    837837
    838         reader.GetBytes(begin.get(), len);
     838        IPCMsgReaderReadBytes(pMsgReader, begin.get(), len);
    839839      }
    840840      break;
     
    10671067static nsresult
    10681068DeserializeArrayParam(ipcDConnectService *dConnect,
    1069                       ipcMessageReader &reader, PRUint32 peerID,
     1069                      PIPCMSGREADER pMsgReader, PRUint32 peerID,
    10701070                      nsIInterfaceInfo *iinfo, uint16 methodIndex,
    10711071                      const nsXPTMethodInfo &methodInfo,
     
    10841084    return rv;
    10851085
    1086   PRUint8 prefix = reader.GetInt8();
     1086  PRUint8 prefix = IPCMsgReaderGetU8(pMsgReader);
    10871087  if (prefix == 0)
    10881088  {
     
    11191119  {
    11201120    // this is a simple arithmetic type, read the whole array at once
    1121     reader.GetBytes(arr, length * elemSize);
     1121    IPCMsgReaderReadBytes(pMsgReader, arr, length * elemSize);
    11221122
    11231123    array = arr;
     
    11301130  for (PRUint32 i = 0; i < length; ++i)
    11311131  {
    1132     rv = DeserializeParam(reader, elemType, v);
     1132    rv = DeserializeParam(pMsgReader, elemType, v);
    11331133
    11341134    if (NS_SUCCEEDED(rv) && elemType.IsInterfacePointer())
     
    21142114
    21152115nsresult
    2116 ipcDConnectService::DeserializeException(ipcMessageReader &reader,
     2116ipcDConnectService::DeserializeException(PIPCMSGREADER pMsgReader,
    21172117                                         PRUint32 peer,
    21182118                                         nsIException **xcpt)
     
    21262126
    21272127  PtrBits bits = 0;
    2128   reader.GetBytes(&bits, sizeof(DConAddr));
    2129   if (reader.HasError())
     2128  IPCMsgReaderReadBytes(pMsgReader, &bits, sizeof(DConAddr));
     2129  if (IPCMsgReaderHasError(pMsgReader))
    21302130    return NS_ERROR_INVALID_ARG;
    21312131
     
    21362136
    21372137    nsCAutoString message;
    2138     len = reader.GetInt32();
     2138    len = IPCMsgReaderGetU32(pMsgReader);
    21392139    if (len)
    21402140    {
    21412141      message.SetLength(len);
    21422142      char *buf = message.BeginWriting();
    2143       reader.GetBytes(buf, len);
    2144     }
    2145 
    2146     nsresult result = reader.GetInt32();
     2143      IPCMsgReaderReadBytes(pMsgReader, buf, len);
     2144    }
     2145
     2146    nsresult result = IPCMsgReaderGetU32(pMsgReader);
    21472147
    21482148    nsCAutoString name;
    2149     len = reader.GetInt32();
     2149    len = IPCMsgReaderGetU32(pMsgReader);
    21502150    if (len)
    21512151    {
    21522152      name.SetLength(len);
    21532153      char *buf = name.BeginWriting();
    2154       reader.GetBytes(buf, len);
     2154      IPCMsgReaderReadBytes(pMsgReader, buf, len);
    21552155    }
    21562156
    21572157    nsCAutoString filename;
    2158     len = reader.GetInt32();
     2158    len = IPCMsgReaderGetU32(pMsgReader);
    21592159    if (len)
    21602160    {
    21612161      filename.SetLength(len);
    21622162      char *buf = filename.BeginWriting();
    2163       reader.GetBytes(buf, len);
    2164     }
    2165 
    2166     PRUint32 lineNumber = reader.GetInt32();
    2167     PRUint32 columnNumber = reader.GetInt32();
    2168 
    2169     if (reader.HasError())
     2163      IPCMsgReaderReadBytes(pMsgReader, buf, len);
     2164    }
     2165
     2166    PRUint32 lineNumber = IPCMsgReaderGetU32(pMsgReader);
     2167    PRUint32 columnNumber = IPCMsgReaderGetU32(pMsgReader);
     2168
     2169    if (IPCMsgReaderHasError(pMsgReader))
    21702170      rv = NS_ERROR_INVALID_ARG;
    21712171    else
     
    26452645  while (completion.IsPending());
    26462646
    2647   ipcMessageReader reader(completion.Params(), completion.ParamsLen());
     2647  IPCMSGREADER MsgReader;
     2648  IPCMsgReaderInit(&MsgReader, completion.Params(), completion.ParamsLen());
    26482649
    26492650  rv = completion.GetResult();
     
    26582659
    26592660      if (paramInfo.IsOut() || paramInfo.IsRetval())
    2660         DeserializeResult(reader, paramInfo.GetType(), aParams[i]);
     2661        DeserializeResult(&MsgReader, paramInfo.GetType(), aParams[i]);
    26612662    }
    26622663
     
    26962697        {
    26972698          void *array = nsnull;
    2698           rv = DeserializeArrayParam(dConnect, reader, mPeerID, mIInfo,
     2699          rv = DeserializeArrayParam(dConnect, &MsgReader, mPeerID, mIInfo,
    26992700                                     aMethodIndex, *aInfo, aParams, PR_FALSE,
    27002701                                     paramInfo, PR_TRUE, array);
     
    27112712
    27122713    nsIException *xcpt = nsnull;
    2713     rv = dConnect->DeserializeException (reader, mPeerID, &xcpt);
     2714    rv = dConnect->DeserializeException (&MsgReader, mPeerID, &xcpt);
    27142715    if (NS_SUCCEEDED(rv))
    27152716    {
     
    27752776      const PRUint32 paramsLen = opLen - sizeof (DConnectSetupReply);
    27762777
    2777       ipcMessageReader reader(params, paramsLen);
     2778      IPCMSGREADER MsgReader;
     2779      IPCMsgReaderInit(&MsgReader, params, paramsLen);
    27782780
    27792781      Log(("got nsIException instance, will create a stub\n"));
     
    27932795          {
    27942796            nsIException *xcpt = nsnull;
    2795             rv = dConnect->DeserializeException (reader, sender, &xcpt);
     2797            rv = dConnect->DeserializeException (&MsgReader, sender, &xcpt);
    27962798            if (NS_SUCCEEDED(rv))
    27972799            {
     
    36613663  DConnectInstance *wrapper = (DConnectInstance *)invoke->instance;
    36623664
    3663   ipcMessageReader reader((const PRUint8 *) (invoke + 1), opLen - sizeof(*invoke));
     3665  IPCMSGREADER MsgReader;
     3666  IPCMsgReaderInit(&MsgReader, (const PRUint8 *) (invoke + 1), opLen - sizeof(*invoke));
    36643667
    36653668  const nsXPTMethodInfo *methodInfo;
     
    37123715
    37133716    if (paramInfo.IsIn() && !paramInfo.IsDipper())
    3714       rv = DeserializeParam(reader, paramInfo.GetType(), params[i]);
     3717      rv = DeserializeParam(&MsgReader, paramInfo.GetType(), params[i]);
    37153718    else
    37163719      rv = SetupParam(paramInfo, params[i]);
     
    37603763      {
    37613764        void *array = nsnull;
    3762         rv = DeserializeArrayParam(this, reader, peer, iinfo,
     3765        rv = DeserializeArrayParam(this, &MsgReader, peer, iinfo,
    37633766                                   invoke->method_index, *methodInfo, params,
    37643767                                   PR_TRUE, paramInfo, PR_FALSE, array);
  • trunk/src/libs/xpcom18a4/ipc/ipcd/extensions/dconnect/src/ipcDConnectService.h

    r103488 r103562  
    3939#include "ipcdclient.h"
    4040
     41#include "ipcMsgReader.h"
     42
    4143#include "nsIInterfaceInfo.h"
    4244#include "nsIInterfaceInfoManager.h"
     
    5557
    5658class nsIException;
    57 class ipcMessageReader;
    5859class ipcMessageWriter;
    5960
     
    204205                                          PRUint32 peer, nsIException *xcpt,
    205206                                          nsVoidArray &wrappers);
    206   NS_HIDDEN_(nsresult) DeserializeException(ipcMessageReader &reader,
     207  NS_HIDDEN_(nsresult) DeserializeException(PIPCMSGREADER pMsgReader,
    207208                                            PRUint32 peer, nsIException **xcpt);
    208209
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette