Commit eb88ca57 authored by Jonathan Kew's avatar Jonathan Kew
Browse files

Bug 1314932 - Reduce content-process startup time on MacOSX by passing the...

Bug 1314932 - Reduce content-process startup time on MacOSX by passing the system font list from chrome to content process via the GetXPCOMProcessAttributes message. r=mstange
parent 15b1c3dd
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -918,7 +918,8 @@ ContentChild::InitXPCOM()
  SendGetXPCOMProcessAttributes(&isOffline, &isConnected,
                                &isLangRTL, &haveBidiKeyboards,
                                &mAvailableDictionaries,
                                &clipboardCaps, &domainPolicy, &initialData);
                                &clipboardCaps, &domainPolicy, &initialData,
                                &mFontFamilies);
  RecvSetOffline(isOffline);
  RecvSetConnectivity(isConnected);
  RecvBidiKeyboardNotify(isLangRTL, haveBidiKeyboards);
+12 −0
Original line number Diff line number Diff line
@@ -625,6 +625,13 @@ public:
  SendGetA11yContentId();
#endif // defined(XP_WIN) && defined(ACCESSIBILITY)

  // Get a reference to the font family list passed from the chrome process,
  // for use during gfx initialization.
  InfallibleTArray<mozilla::dom::FontFamilyListEntry>&
  SystemFontFamilyList() {
    return mFontFamilies;
  }

  /**
   * Helper function for protocols that use the GPU process when available.
   * Overrides FatalError to just be a warning when communicating with the
@@ -650,6 +657,11 @@ private:

  InfallibleTArray<nsString> mAvailableDictionaries;

  // Temporary storage for a list of available font families, passed from the
  // parent process and used to initialize gfx in the child. Currently used
  // only on MacOSX.
  InfallibleTArray<mozilla::dom::FontFamilyListEntry> mFontFamilies;

  /**
   * An ID unique to the process containing our corresponding
   * content parent.
+5 −1
Original line number Diff line number Diff line
@@ -2541,7 +2541,8 @@ ContentParent::RecvGetXPCOMProcessAttributes(bool* aIsOffline,
                                             InfallibleTArray<nsString>* dictionaries,
                                             ClipboardCapabilities* clipboardCaps,
                                             DomainPolicyClone* domainPolicy,
                                             StructuredCloneData* aInitialData)
                                             StructuredCloneData* aInitialData,
                                             InfallibleTArray<FontFamilyListEntry>* fontFamilies)
{
  nsCOMPtr<nsIIOService> io(do_GetIOService());
  MOZ_ASSERT(io, "No IO service?");
@@ -2598,6 +2599,9 @@ ContentParent::RecvGetXPCOMProcessAttributes(bool* aIsOffline,
    }
  }

  // This is only implemented (returns a non-empty list) by MacOSX at present.
  gfxPlatform::GetPlatform()->GetSystemFontFamilyList(fontFamilies);

  return IPC_OK();
}

+3 −1
Original line number Diff line number Diff line
@@ -672,7 +672,9 @@ private:
                                InfallibleTArray<nsString>* dictionaries,
                                ClipboardCapabilities* clipboardCaps,
                                DomainPolicyClone* domainPolicy,
                                StructuredCloneData* initialData) override;
                                StructuredCloneData* initialData,
                                InfallibleTArray<FontFamilyListEntry>* fontFamilies)
                                override;

  virtual bool
  DeallocPJavaScriptParent(mozilla::jsipc::PJavaScriptParent*) override;
+13 −1
Original line number Diff line number Diff line
@@ -105,6 +105,8 @@ union ChromeRegistryItem
namespace mozilla {
namespace dom {

// Used on Android/B2G to pass the list of fonts on the device
// to the child process
struct FontListEntry {
    nsString  familyName;
    nsString  faceName;
@@ -116,6 +118,15 @@ struct FontListEntry {
    bool      isHidden;
};

// Used on Mac OS X to pass the list of font families (not faces)
// from chrome to content processes.
// The entryType field distinguishes several types of font family
// record; see gfxMacPlatformFontList.h for values and meaning.
struct FontFamilyListEntry {
    nsString familyName;
    uint8_t  entryType;
};

struct DeviceStorageFreeSpaceParams
{
  nsString type;
@@ -682,7 +693,8 @@ parent:
                 bool haveBidiKeyboards, nsString[] dictionaries,
                 ClipboardCapabilities clipboardCaps,
                 DomainPolicyClone domainPolicy,
                 StructuredCloneData initialData);
                 StructuredCloneData initialData,
                 FontFamilyListEntry[] fontFamilies /* used on MacOSX only */);

    sync CreateChildProcess(IPCTabContext context,
                            ProcessPriority priority,
Loading