VirtualBox

Changeset 102774 in vbox for trunk/src/VBox/Frontends


Ignore:
Timestamp:
Jan 5, 2024 2:29:14 PM (13 months ago)
Author:
vboxsync
Message:

FE/Qt: bugref:10501. Checking the cloud vm machine state more frequently.

Location:
trunk/src/VBox/Frontends/VirtualBox/src/activity/vmactivity
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VirtualBox/src/activity/vmactivity/UIVMActivityMonitor.cpp

    r102773 r102774  
    19321932UIVMActivityMonitorCloud::UIVMActivityMonitorCloud(EmbedTo enmEmbedding, QWidget *pParent, const CCloudMachine &machine)
    19331933    :UIVMActivityMonitor(enmEmbedding, pParent, 60 /* iMaximumQueueSize */)
     1934    , m_pMachineStateUpdateTimer(0)
     1935    , m_enmMachineState(KCloudMachineState_Invalid)
    19341936{
    19351937    m_metricTypeNames[KMetricType_CpuUtilization] = m_strCPUMetricName;
     
    19421944    setMachine(machine);
    19431945    determineTotalRAMAmount();
     1946
     1947    m_pMachineStateUpdateTimer = new QTimer(this);
     1948    if (m_pMachineStateUpdateTimer)
     1949        connect(m_pMachineStateUpdateTimer, &QTimer::timeout, this, &UIVMActivityMonitorCloud::sltMachineStateUpdateTimeout);
    19441950
    19451951    prepareMetrics();
     
    19521958    resetRAMInfoLabel();
    19531959
    1954     if (m_comMachine.isOk())
    1955     {
    1956         m_ReadListProgressTask = new UIProgressTaskReadCloudMachineMetricList(this, m_comMachine);
    1957         if (m_ReadListProgressTask)
    1958             connect(m_ReadListProgressTask, &UIProgressTaskReadCloudMachineMetricList::sigMetricListReceived,
    1959                     this, &UIVMActivityMonitorCloud::sltMetricNameListingComplete);
    1960     }
    19611960    /* Start the timer: */
    19621961    start();
     
    20082007}
    20092008
     2009void UIVMActivityMonitorCloud::sltMachineStateUpdateTimeout()
     2010{
     2011    if (!m_comMachine.isOk())
     2012        return;
     2013
     2014    KCloudMachineState enmNewState = m_comMachine.GetState();
     2015    /* No changes. Noting to do: */
     2016    if (m_enmMachineState == enmNewState)
     2017        return;
     2018
     2019    if (m_ReadListProgressTask)
     2020    {
     2021        disconnect(m_ReadListProgressTask, &UIProgressTaskReadCloudMachineMetricList::sigMetricListReceived,
     2022                   this, &UIVMActivityMonitorCloud::sltMetricNameListingComplete);
     2023        delete m_ReadListProgressTask;
     2024    }
     2025
     2026    if (enmNewState == KCloudMachineState_Running)
     2027    {
     2028        m_ReadListProgressTask = new UIProgressTaskReadCloudMachineMetricList(this, m_comMachine);
     2029        if (m_ReadListProgressTask)
     2030        {
     2031            connect(m_ReadListProgressTask, &UIProgressTaskReadCloudMachineMetricList::sigMetricListReceived,
     2032                    this, &UIVMActivityMonitorCloud::sltMetricNameListingComplete);
     2033            m_ReadListProgressTask->start();
     2034        }
     2035        setEnabled(true);
     2036        /* Every minute: */
     2037        if (m_pTimer)
     2038            m_pTimer->start(1000 * 60);
     2039    }
     2040    else
     2041    {
     2042        reset();
     2043        if (m_pTimer)
     2044            m_pTimer->stop();
     2045    }
     2046    m_enmMachineState = enmNewState;
     2047}
     2048
    20102049void UIVMActivityMonitorCloud::sltMetricNameListingComplete(QVector<QString> metricNameList)
    20112050{
     
    20182057
    20192058    sender()->deleteLater();
     2059    obtainDataAndUpdate();
    20202060}
    20212061
     
    20762116void UIVMActivityMonitorCloud::obtainDataAndUpdate()
    20772117{
    2078     /* No need to refresh cached values of the ICloudMachine since it has been already done
    2079      * by the VM list related class. Just fetch the machine attribute here:  */
    2080     if (!m_comMachine.isOk() || m_comMachine.GetState() != KCloudMachineState_Running)
    2081     {
    2082         setEnabled(false);
    2083         return;
    2084     }
    2085     if (!isEnabled())
    2086         setEnabled(true);
    2087     if (m_ReadListProgressTask && !m_ReadListProgressTask->isRunning())
    2088         m_ReadListProgressTask->start();
    20892118    foreach (const KMetricType &enmMetricType, m_availableMetricTypes)
    20902119    {
     
    21132142    return QString();
    21142143}
    2115 void UIVMActivityMonitorCloud::reset(){}
     2144void UIVMActivityMonitorCloud::reset()
     2145{
     2146    setEnabled(false);
     2147
     2148    if (m_pTimer)
     2149        m_pTimer->stop();
     2150    /* reset the metrics. this will delete their data cache: */
     2151    for (QMap<QString, UIMetric>::iterator iterator =  m_metrics.begin();
     2152         iterator != m_metrics.end(); ++iterator)
     2153        iterator.value().reset();
     2154    /* force update on the charts to draw now emptied metrics' data: */
     2155    for (QMap<QString, UIChart*>::iterator iterator =  m_charts.begin();
     2156         iterator != m_charts.end(); ++iterator)
     2157        iterator.value()->update();
     2158    /* Reset the info labels: */
     2159    resetCPUInfoLabel();
     2160    resetRAMInfoLabel();
     2161    resetNetworkInfoLabel();
     2162    resetDiskIOInfoLabel();
     2163
     2164    m_diskWriteCache.clear();
     2165    m_diskReadCache.clear();
     2166
     2167    m_networkReceiveCache.clear();
     2168    m_networkTransmitCache.clear();
     2169
     2170    update();
     2171    //sltClearCOMData();
     2172}
     2173
    21162174void UIVMActivityMonitorCloud::start()
    21172175{
    2118     obtainDataAndUpdate();
    2119     /* Every minute: */
    2120     if (m_pTimer)
    2121         m_pTimer->start(1000 * 60);
    2122 
     2176    sltMachineStateUpdateTimeout();
     2177    if (m_pMachineStateUpdateTimer)
     2178        m_pMachineStateUpdateTimer->start(1000 * 10);
    21232179}
    21242180
  • trunk/src/VBox/Frontends/VirtualBox/src/activity/vmactivity/UIVMActivityMonitor.h

    r102746 r102774  
    326326    void sltMetricNameListingComplete(QVector<QString> metricNameList);
    327327    void sltMetricDataReceived(KMetricType enmMetricType, QVector<QString> data, QVector<QString> timeStamps);
     328    void sltMachineStateUpdateTimeout();
    328329
    329330private:
     
    360361
    361362    CCloudMachine m_comMachine;
    362     UIProgressTaskReadCloudMachineMetricList *m_ReadListProgressTask;
     363    QPointer<UIProgressTaskReadCloudMachineMetricList> m_ReadListProgressTask;
    363364
    364365    QVector<KMetricType> m_availableMetricTypes;
     
    374375    /** Total amount of RAM in kb. */
    375376    quint64 m_iTotalRAM;
     377    QTimer *m_pMachineStateUpdateTimer;
     378    KCloudMachineState m_enmMachineState;
    376379};
    377380#endif /* !FEQT_INCLUDED_SRC_activity_vmactivity_UIVMActivityMonitor_h */
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