mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-14 13:55:43 +00:00
Bug 1451363 - part 2a - move protocol register/lookup functions into ProtocolState; r=mccr8
This functionality is base functionality for top-level and non-toplevel protocols; nobody overrides this stuff, so it's safe to move into ProtocolState.
This commit is contained in:
parent
a796a8f982
commit
8196fc2720
@ -398,30 +398,30 @@ IProtocol::ReadActor(const IPC::Message* aMessage, PickleIterator* aIter, bool a
|
||||
}
|
||||
|
||||
int32_t
|
||||
IProtocol::Register(IProtocol* aRouted)
|
||||
IProtocol::ManagedState::Register(IProtocol* aRouted)
|
||||
{
|
||||
return Manager()->Register(aRouted);
|
||||
return mProtocol->Manager()->Register(aRouted);
|
||||
}
|
||||
|
||||
int32_t
|
||||
IProtocol::RegisterID(IProtocol* aRouted, int32_t aId)
|
||||
IProtocol::ManagedState::RegisterID(IProtocol* aRouted, int32_t aId)
|
||||
{
|
||||
return Manager()->RegisterID(aRouted, aId);
|
||||
return mProtocol->Manager()->RegisterID(aRouted, aId);
|
||||
}
|
||||
|
||||
IProtocol*
|
||||
IProtocol::Lookup(int32_t aId)
|
||||
IProtocol::ManagedState::Lookup(int32_t aId)
|
||||
{
|
||||
return Manager()->Lookup(aId);
|
||||
return mProtocol->Manager()->Lookup(aId);
|
||||
}
|
||||
|
||||
void
|
||||
IProtocol::Unregister(int32_t aId)
|
||||
IProtocol::ManagedState::Unregister(int32_t aId)
|
||||
{
|
||||
if (mId == aId) {
|
||||
mId = kFreedActorId;
|
||||
if (mProtocol->mId == aId) {
|
||||
mProtocol->mId = kFreedActorId;
|
||||
}
|
||||
Manager()->Unregister(aId);
|
||||
mProtocol->Manager()->Unregister(aId);
|
||||
}
|
||||
|
||||
Shmem::SharedMemory*
|
||||
@ -582,7 +582,6 @@ IToplevelProtocol::IToplevelProtocol(ProtocolId aProtoId, Side aSide)
|
||||
mProtocolId(aProtoId),
|
||||
mOtherPid(mozilla::ipc::kInvalidProcessId),
|
||||
mOtherPidState(ProcessIdState::eUnstarted),
|
||||
mLastRouteId(aSide == ParentSide ? kFreedActorId : kNullActorId),
|
||||
mEventTargetMutex("ProtocolEventTargetMutex")
|
||||
{
|
||||
}
|
||||
@ -694,13 +693,13 @@ IToplevelProtocol::IsOnCxxStack() const
|
||||
}
|
||||
|
||||
int32_t
|
||||
IToplevelProtocol::Register(IProtocol* aRouted)
|
||||
IToplevelProtocol::ToplevelState::Register(IProtocol* aRouted)
|
||||
{
|
||||
if (aRouted->Id() != kNullActorId && aRouted->Id() != kFreedActorId) {
|
||||
// If there's already an ID, just return that.
|
||||
return aRouted->Id();
|
||||
}
|
||||
int32_t id = GetSide() == ParentSide ? ++mLastRouteId : --mLastRouteId;
|
||||
int32_t id = mProtocol->GetSide() == ParentSide ? ++mLastRouteId : --mLastRouteId;
|
||||
mActorMap.AddWithID(aRouted, id);
|
||||
aRouted->SetId(id);
|
||||
|
||||
@ -716,8 +715,8 @@ IToplevelProtocol::Register(IProtocol* aRouted)
|
||||
}
|
||||
|
||||
int32_t
|
||||
IToplevelProtocol::RegisterID(IProtocol* aRouted,
|
||||
int32_t aId)
|
||||
IToplevelProtocol::ToplevelState::RegisterID(IProtocol* aRouted,
|
||||
int32_t aId)
|
||||
{
|
||||
mActorMap.AddWithID(aRouted, aId);
|
||||
aRouted->SetId(aId);
|
||||
@ -725,13 +724,13 @@ IToplevelProtocol::RegisterID(IProtocol* aRouted,
|
||||
}
|
||||
|
||||
IProtocol*
|
||||
IToplevelProtocol::Lookup(int32_t aId)
|
||||
IToplevelProtocol::ToplevelState::Lookup(int32_t aId)
|
||||
{
|
||||
return mActorMap.Lookup(aId);
|
||||
}
|
||||
|
||||
void
|
||||
IToplevelProtocol::Unregister(int32_t aId)
|
||||
IToplevelProtocol::ToplevelState::Unregister(int32_t aId)
|
||||
{
|
||||
mActorMap.Remove(aId);
|
||||
|
||||
@ -741,6 +740,7 @@ IToplevelProtocol::Unregister(int32_t aId)
|
||||
|
||||
IToplevelProtocol::ToplevelState::ToplevelState(IToplevelProtocol* aProtocol, Side aSide)
|
||||
: mProtocol(aProtocol)
|
||||
, mLastRouteId(aSide == ParentSide ? kFreedActorId : kNullActorId)
|
||||
, mLastShmemId(aSide == ParentSide ? kFreedActorId : kNullActorId)
|
||||
{
|
||||
}
|
||||
|
@ -159,12 +159,20 @@ public:
|
||||
class ProtocolState
|
||||
{
|
||||
public:
|
||||
virtual ~ProtocolState() = default;
|
||||
|
||||
// Shared memory functions.
|
||||
virtual Shmem::SharedMemory* CreateSharedMemory(
|
||||
size_t, SharedMemory::SharedMemoryType, bool, int32_t*) = 0;
|
||||
virtual Shmem::SharedMemory* LookupSharedMemory(int32_t) = 0;
|
||||
virtual bool IsTrackingSharedMemory(Shmem::SharedMemory*) = 0;
|
||||
virtual bool DestroySharedMemory(Shmem&) = 0;
|
||||
virtual ~ProtocolState() = default;
|
||||
|
||||
// Protocol management functions.
|
||||
virtual int32_t Register(IProtocol*) = 0;
|
||||
virtual int32_t RegisterID(IProtocol*, int32_t) = 0;
|
||||
virtual IProtocol* Lookup(int32_t) = 0;
|
||||
virtual void Unregister(int32_t) = 0;
|
||||
};
|
||||
|
||||
// Managed protocols just forward all of their operations to the topmost
|
||||
@ -182,6 +190,11 @@ public:
|
||||
bool IsTrackingSharedMemory(Shmem::SharedMemory*) override;
|
||||
bool DestroySharedMemory(Shmem&) override;
|
||||
|
||||
int32_t Register(IProtocol*) override;
|
||||
int32_t RegisterID(IProtocol*, int32_t) override;
|
||||
IProtocol* Lookup(int32_t) override;
|
||||
void Unregister(int32_t) override;
|
||||
|
||||
private:
|
||||
IProtocol* const mProtocol;
|
||||
};
|
||||
@ -194,10 +207,23 @@ public:
|
||||
: IProtocol(aSide, MakeUnique<ManagedState>(this))
|
||||
{}
|
||||
|
||||
virtual int32_t Register(IProtocol*);
|
||||
virtual int32_t RegisterID(IProtocol*, int32_t);
|
||||
virtual IProtocol* Lookup(int32_t);
|
||||
virtual void Unregister(int32_t);
|
||||
int32_t Register(IProtocol* aRouted)
|
||||
{
|
||||
return mState->Register(aRouted);
|
||||
}
|
||||
int32_t RegisterID(IProtocol* aRouted, int32_t aId)
|
||||
{
|
||||
return mState->RegisterID(aRouted, aId);
|
||||
}
|
||||
IProtocol* Lookup(int32_t aId)
|
||||
{
|
||||
return mState->Lookup(aId);
|
||||
}
|
||||
void Unregister(int32_t aId)
|
||||
{
|
||||
return mState->Unregister(aId);
|
||||
}
|
||||
|
||||
virtual void RemoveManagee(int32_t, IProtocol*) = 0;
|
||||
|
||||
Shmem::SharedMemory* CreateSharedMemory(
|
||||
@ -359,8 +385,15 @@ public:
|
||||
bool ShmemCreated(const Message& aMsg);
|
||||
bool ShmemDestroyed(const Message& aMsg);
|
||||
|
||||
int32_t Register(IProtocol*) override;
|
||||
int32_t RegisterID(IProtocol*, int32_t) override;
|
||||
IProtocol* Lookup(int32_t) override;
|
||||
void Unregister(int32_t) override;
|
||||
|
||||
private:
|
||||
IToplevelProtocol* const mProtocol;
|
||||
IDMap<IProtocol*> mActorMap;
|
||||
int32_t mLastRouteId;
|
||||
IDMap<Shmem::SharedMemory*> mShmemMap;
|
||||
Shmem::id_t mLastShmemId;
|
||||
};
|
||||
@ -408,11 +441,6 @@ public:
|
||||
|
||||
void SetReplyTimeoutMs(int32_t aTimeoutMs);
|
||||
|
||||
virtual int32_t Register(IProtocol*) override;
|
||||
virtual int32_t RegisterID(IProtocol*, int32_t) override;
|
||||
virtual IProtocol* Lookup(int32_t) override;
|
||||
virtual void Unregister(int32_t) override;
|
||||
|
||||
void DeallocShmems() { DowncastState()->DeallocShmems(); }
|
||||
|
||||
bool ShmemCreated(const Message& aMsg) { return DowncastState()->ShmemCreated(aMsg); }
|
||||
@ -540,8 +568,6 @@ protected:
|
||||
UniquePtr<Transport> mTrans;
|
||||
base::ProcessId mOtherPid;
|
||||
ProcessIdState mOtherPidState;
|
||||
IDMap<IProtocol*> mActorMap;
|
||||
int32_t mLastRouteId;
|
||||
bool mIsMainThreadProtocol;
|
||||
|
||||
Mutex mEventTargetMutex;
|
||||
|
Loading…
Reference in New Issue
Block a user