VirtualBox

忽略:
時間撮記:
2019-6-8 下午11:18:17 (6 年 以前)
作者:
vboxsync
svn:sync-xref-src-repo-rev:
131210
訊息:

Main/AdditionsFacilityImpl: Simplified the data by kicking out the unused status backlog and caching the s_aFacilityInfo index corresponding to mData.mType. Added a critique on inconsisten locking (mostly harmless now, but very iffy previously with std::vector hold the status).

檔案:
修改 1 筆資料

圖例:

未更動
新增
刪除
  • trunk/src/VBox/Main/include/AdditionsFacilityImpl.h

    r79051 r79052  
    11/* $Id$ */
    22/** @file
    3  * VirtualBox COM class implementation
     3 * VirtualBox Main - Additions facility class.
    44 */
    55
     
    2222#endif
    2323
    24 #include <vector>
    2524#include <iprt/time.h>
    26 
    2725#include "AdditionsFacilityWrap.h"
    2826
    2927class Guest;
    3028
     29/**
     30 * A guest additions facility.
     31 */
    3132class ATL_NO_VTABLE AdditionsFacility :
    3233    public AdditionsFacilityWrap
     
    3637    DECLARE_EMPTY_CTOR_DTOR(AdditionsFacility)
    3738
    38     // public initializer/uninitializer for internal purposes only
     39    /** @name Initializer & uninitializer methods
     40     * @{ */
    3941    HRESULT init(Guest *a_pParent, AdditionsFacilityType_T a_enmFacility, AdditionsFacilityStatus_T a_enmStatus,
    4042                 uint32_t a_fFlags, PCRTTIMESPEC a_pTimeSpecTS);
    41     void uninit();
    42 
     43    void    uninit();
    4344    HRESULT FinalConstruct();
    44     void FinalRelease();
    45 
     45    void    FinalRelease();
     46    /** @} */
    4647
    4748public:
    48     /** Facility <-> string mappings. */
    49     struct FacilityInfo
    50     {
    51         /** The facilitie's name. */
    52         const char              *mName; /* utf-8 */
    53         /** The facilitie's type. */
    54         AdditionsFacilityType_T  mType;
    55         /** The facilitie's class. */
    56         AdditionsFacilityClass_T mClass;
    57     };
    58     static const FacilityInfo s_aFacilityInfo[8];
    59 
    6049    /** @name public internal methods
    6150     * @{ */
    62     static const AdditionsFacility::FacilityInfo &i_typeToInfo(AdditionsFacilityType_T aType);
    6351    LONG64 i_getLastUpdated() const;
    64 #if 0 /* unused */
     52#if 1 /* unused */
    6553    AdditionsFacilityType_T i_getType() const;
    6654    AdditionsFacilityClass_T i_getClass() const;
     
    8270    /** @} */
    8371
    84     /** A structure for keeping a facility status
    85      *  set at a certain time. Good for book-keeping. */
    86     struct FacilityState
    87     {
    88         RTTIMESPEC                mTimestamp;
    89         /** The facilitie's current status. */
    90         AdditionsFacilityStatus_T mStatus;
    91     };
    92 
    9372    struct Data
    9473    {
    95         /** Record of current and previous facility
    96          *  states, limited to the 10 last states set.
    97          *  Note: This intentionally only is kept in
    98          *        Main so far! */
    99         std::vector<FacilityState> mStates;
    100         /** The facilitie's ID/type. */
    101         AdditionsFacilityType_T    mType;
     74        /** Last update timestamp. */
     75        RTTIMESPEC                  mTimestamp;
     76        /** The facilitie's current status. */
     77        AdditionsFacilityStatus_T   mStatus;
     78        /** Flags. */
     79        uint32_t                    mfFlags;
     80        /** The facilitie's ID/type (static). */
     81        AdditionsFacilityType_T     mType;
     82        /** Index into s_aFacilityInfo. */
     83        size_t                      midxInfo;
    10284    } mData;
     85
     86    /** Facility <-> string mappings. */
     87    struct FacilityInfo
     88    {
     89        /** The facilitie's name. */
     90        const char              *mName; /* utf-8 */
     91        /** The facilitie's type. */
     92        AdditionsFacilityType_T  mType;
     93        /** The facilitie's class. */
     94        AdditionsFacilityClass_T mClass;
     95    };
     96    static const FacilityInfo s_aFacilityInfo[8];
    10397};
    10498
注意: 瀏覽 TracChangeset 來幫助您使用更動檢視器

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