Skip to content
Snippets Groups Projects
  • Nat Goodspeed's avatar
    df3da846
    MAINT-5232: Add LLPounceable template for delayed registrations. · df3da846
    Nat Goodspeed authored
    LLMuteList, an LLSingleton, overrides its getInstance() method to intercept
    control every time a consumer wants LLMuteList. This "polling" is to notice
    when gMessageSystem becomes non-NULL, and register a couple callbacks on it.
    Unfortunately there are a couple ways to request the LLMuteList instance
    without specifically calling the subclass getInstance(), which would bypass
    that logic. Moreover, the polling feels a bit dubious to start with.
    LLPounceable<T*> presents an idiom in which you can callWhenReady(callable) on
    the LLPounceable instance. If the T* is already non-NULL, it calls the
    callable immediately; otherwise it enqueues it for when the T* is set
    non-NULL. (This lets you "pounce" on the T* as soon as it becomes available,
    hence the name.) So if gMessageSystem were an LLPounceable<LLMessageSystem*>,
    LLMuteList's constructor could simply call gMessageSystem.callWhenReady() and
    relax: the callbacks would be registered either on LLMuteList construction or
    LLMessageSystem initialization, whichever comes later.
    LLPounceable comes with its very own set of unit tests. However, as of this
    commit it is not yet used in actual viewer code.
    df3da846
    History
    MAINT-5232: Add LLPounceable template for delayed registrations.
    Nat Goodspeed authored
    LLMuteList, an LLSingleton, overrides its getInstance() method to intercept
    control every time a consumer wants LLMuteList. This "polling" is to notice
    when gMessageSystem becomes non-NULL, and register a couple callbacks on it.
    Unfortunately there are a couple ways to request the LLMuteList instance
    without specifically calling the subclass getInstance(), which would bypass
    that logic. Moreover, the polling feels a bit dubious to start with.
    LLPounceable<T*> presents an idiom in which you can callWhenReady(callable) on
    the LLPounceable instance. If the T* is already non-NULL, it calls the
    callable immediately; otherwise it enqueues it for when the T* is set
    non-NULL. (This lets you "pounce" on the T* as soon as it becomes available,
    hence the name.) So if gMessageSystem were an LLPounceable<LLMessageSystem*>,
    LLMuteList's constructor could simply call gMessageSystem.callWhenReady() and
    relax: the callbacks would be registered either on LLMuteList construction or
    LLMessageSystem initialization, whichever comes later.
    LLPounceable comes with its very own set of unit tests. However, as of this
    commit it is not yet used in actual viewer code.
Code owners
Assign users and groups as approvers for specific file changes. Learn more.