VirtualBox

Changeset 4513 in vbox for trunk/src/VBox


Ignore:
Timestamp:
Sep 4, 2007 11:41:37 AM (17 years ago)
Author:
vboxsync
Message:

Reapplied fixed 24093.

Location:
trunk/src/VBox/Main
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Main/GuestImpl.cpp

    r4498 r4513  
    174174STDMETHODIMP Guest::COMSETTER(MemoryBalloonSize) (ULONG aMemoryBalloonSize)
    175175{
    176     /** @todo fail if larger than physical memory */
    177 
    178     AutoCaller autoCaller (this);
    179     CheckComRCReturnRC (autoCaller.rc());
    180 
    181     AutoReaderLock alock (this);
    182 
    183     mMemoryBalloonSize = aMemoryBalloonSize;
    184 
    185     return S_OK;
     176    AutoCaller autoCaller (this);
     177    CheckComRCReturnRC (autoCaller.rc());
     178
     179    AutoReaderLock alock (this);
     180
     181    HRESULT ret = mParent->machine()->COMSETTER(MemoryBalloonSize)(aMemoryBalloonSize);
     182    if (ret == S_OK)
     183    {
     184        mMemoryBalloonSize = aMemoryBalloonSize;
     185        /* forward the information to the VMM device */
     186        VMMDev *vmmDev = mParent->getVMMDev();
     187        if (vmmDev)
     188            vmmDev->getVMMDevPort()->pfnSetMemoryBalloon(vmmDev->getVMMDevPort(), aMemoryBalloonSize);
     189    }
     190
     191    return ret;
    186192}
    187193
  • trunk/src/VBox/Main/MachineImpl.cpp

    r4498 r4513  
    4141#include "GuestOSTypeImpl.h"
    4242#include "VirtualBoxErrorInfoImpl.h"
     43#include "GuestImpl.h"
    4344
    4445#include "USBProxyService.h"
     
    164165    /* default values for a newly created machine */
    165166    mMemorySize = 128;
     167    mMemoryBalloonSize = 0;
    166168    mVRAMSize = 8;
    167169    mMonitorCount = 1;
     
    188190
    189191    if (mMemorySize != that.mMemorySize ||
     192        mMemoryBalloonSize != that.mMemoryBalloonSize ||
    190193        mVRAMSize != that.mVRAMSize ||
    191194        mMonitorCount != that.mMonitorCount ||
     
    977980    return S_OK;
    978981}
     982
     983
     984STDMETHODIMP Machine::COMGETTER(MemoryBalloonSize) (ULONG *memoryBalloonSize)
     985{
     986    if (!memoryBalloonSize)
     987        return E_POINTER;
     988
     989    AutoCaller autoCaller (this);
     990    CheckComRCReturnRC (autoCaller.rc());
     991
     992    AutoReaderLock alock (this);
     993
     994    *memoryBalloonSize = mHWData->mMemoryBalloonSize;
     995
     996    return S_OK;
     997}
     998
     999STDMETHODIMP Machine::COMSETTER(MemoryBalloonSize) (ULONG memoryBalloonSize)
     1000{
     1001    /* check limits */
     1002    if (memoryBalloonSize >= VMMDEV_MAX_MEMORY_BALLOON(mHWData->mMemorySize))
     1003        return setError (E_INVALIDARG,
     1004            tr ("Invalid memory balloon size: %lu MB (must be in range [%lu, %lu] MB)"),
     1005                memoryBalloonSize, 0, VMMDEV_MAX_MEMORY_BALLOON(mHWData->mMemorySize));
     1006
     1007    AutoCaller autoCaller (this);
     1008    CheckComRCReturnRC (autoCaller.rc());
     1009
     1010    AutoLock alock (this);
     1011
     1012    HRESULT rc = checkStateDependency (MutableStateDep);
     1013    CheckComRCReturnRC (rc);
     1014
     1015    mHWData.backup();
     1016    mHWData->mMemoryBalloonSize = memoryBalloonSize;
     1017
     1018    return S_OK;
     1019}
     1020
    9791021
    9801022STDMETHODIMP Machine::COMGETTER(MonitorCount) (ULONG *monitorCount)
     
    37213763        }
    37223764
     3765        /* Guest node (optional) */
     3766        {
     3767            CFGNODE GuestNode = 0;
     3768            CFGLDRGetChildNode (machineNode, "Guest", 0, &GuestNode);
     3769            if (GuestNode)
     3770            {
     3771                uint32_t memoryBalloonSize = 0;
     3772                CFGLDRQueryUInt32 (GuestNode, "MemoryBalloonSize", &memoryBalloonSize);
     3773                mHWData->mMemoryBalloonSize = memoryBalloonSize;
     3774
     3775                CFGLDRReleaseNode (GuestNode);
     3776            }
     3777        }
     3778
    37233779        /*
    37243780         *  NOTE: the assignment below must be the last thing to do,
     
    53865442            if (FAILED (rc))
    53875443                break;
     5444        }
     5445
     5446        /* Guest node (optional) */
     5447        {
     5448            CFGNODE GuestNode = 0;
     5449            CFGLDRGetChildNode (machineNode, "Guest", 0, &GuestNode);
     5450            /* first, delete the entire node if exists */
     5451            if (GuestNode)
     5452                CFGLDRDeleteNode (GuestNode);
     5453            /* then recreate it */
     5454            GuestNode = 0;
     5455            CFGLDRCreateChildNode (machineNode, "Guest", &GuestNode);
     5456            if (GuestNode)
     5457            {
     5458                CFGLDRSetUInt32 (GuestNode, "MemoryBalloonSize", mHWData->mMemoryBalloonSize);
     5459                CFGLDRReleaseNode (GuestNode);
     5460            }
    53885461        }
    53895462
  • trunk/src/VBox/Main/VMMDevInterface.cpp

    r4498 r4513  
    351351        *pcRect = cRect;
    352352    }
     353
     354    return VINF_SUCCESS;
     355}
     356
     357/**
     358 * Request the statistics interval
     359 *
     360 * @returns VBox status code.
     361 * @param   pInterface          Pointer to this interface.
     362 * @param   pulInterval         Pointer to interval in seconds
     363 * @thread  The emulation thread.
     364 */
     365DECLCALLBACK(int) vmmdevQueryStatisticsInterval(PPDMIVMMDEVCONNECTOR pInterface, uint32_t *pulInterval)
     366{
     367    PDRVMAINVMMDEV pDrv = PDMIVMMDEVCONNECTOR_2_MAINVMMDEV(pInterface);
     368    ULONG          val = 0;
     369
     370    if (!pulInterval)
     371        return VERR_INVALID_POINTER;
     372
     373    /* store that information in IGuest */
     374    Guest* guest = pDrv->pVMMDev->getParent()->getGuest();
     375    Assert(guest);
     376    if (!guest)
     377        return VERR_INVALID_PARAMETER; /** @todo wrong error */
     378
     379    guest->COMGETTER(StatisticsUpdateInterval)(&val);
     380    *pulInterval = val;
     381    return VINF_SUCCESS;
     382}
     383
     384/**
     385 * Report new guest statistics
     386 *
     387 * @returns VBox status code.
     388 * @param   pInterface          Pointer to this interface.
     389 * @param   pGuestStats         Guest statistics
     390 * @thread  The emulation thread.
     391 */
     392DECLCALLBACK(int) vmmdevReportStatistics(PPDMIVMMDEVCONNECTOR pInterface, VBoxGuestStatistics *pGuestStats)
     393{
     394    PDRVMAINVMMDEV pDrv = PDMIVMMDEVCONNECTOR_2_MAINVMMDEV(pInterface);
     395
     396    Assert(pGuestStats);
     397    if (!pGuestStats)
     398        return VERR_INVALID_POINTER;
     399
     400    /* store that information in IGuest */
     401    Guest* guest = pDrv->pVMMDev->getParent()->getGuest();
     402    Assert(guest);
     403    if (!guest)
     404        return VERR_INVALID_PARAMETER; /** @todo wrong error */
     405
     406    if (pGuestStats->u32StatCaps & VBOX_GUEST_STAT_CPU_LOAD)
     407        guest->SetStatistic(GuestStatisticType_CPULoad, pGuestStats->u32CpuLoad);
     408
     409    if (pGuestStats->u32StatCaps & VBOX_GUEST_STAT_THREADS)
     410        guest->SetStatistic(GuestStatisticType_Threads, pGuestStats->u32Threads);
     411
     412    if (pGuestStats->u32StatCaps & VBOX_GUEST_STAT_PROCESSES)
     413        guest->SetStatistic(GuestStatisticType_Processes, pGuestStats->u32Processes);
     414
     415    if (pGuestStats->u32StatCaps & VBOX_GUEST_STAT_PHYS_MEM_TOTAL)
     416        guest->SetStatistic(GuestStatisticType_PhysMemTotal, pGuestStats->u32PhysMemTotal);
     417
     418    if (pGuestStats->u32StatCaps & VBOX_GUEST_STAT_PHYS_MEM_AVAIL)
     419        guest->SetStatistic(GuestStatisticType_PhysMemAvailable, pGuestStats->u32PhysMemAvail);
     420
     421    if (pGuestStats->u32StatCaps & VBOX_GUEST_STAT_PHYS_MEM_BALLOON)
     422        guest->SetStatistic(GuestStatisticType_PhysMemBalloon, pGuestStats->u32PhysMemBalloon);
     423
     424    if (pGuestStats->u32StatCaps & VBOX_GUEST_STAT_PAGE_FILE_SIZE)
     425        guest->SetStatistic(GuestStatisticType_PageFileSize, pGuestStats->u32PageFileSize);
    353426
    354427    return VINF_SUCCESS;
     
    543616    pData->Connector.pfnSetVisibleRegion              = vmmdevSetVisibleRegion;
    544617    pData->Connector.pfnQueryVisibleRegion            = vmmdevQueryVisibleRegion;
     618    pData->Connector.pfnReportStatistics              = vmmdevReportStatistics;
     619    pData->Connector.pfnQueryStatisticsInterval       = vmmdevQueryStatisticsInterval;
    545620
    546621#ifdef VBOX_HGCM
  • trunk/src/VBox/Main/idl/VirtualBox.xidl

    r4498 r4513  
    409409  <enum
    410410     name="GuestStatisticType"
    411      uuid="da89a1b7-e602-45ac-84b7-29c9d12b92d5"
     411     uuid="a7cffd08-665f-4156-b2e9-2b3c64e213da"
    412412     >
    413413    <const name="CPULoad"              value="0">
     
    436436      </desc>
    437437    </const>
    438     <const name="PageFileSize"         value="5">
     438    <const name="PhysMemBalloon"       value="5">
     439      <desc>
     440        Ballooned physical memory in megabytes.
     441      </desc>
     442    </const>
     443    <const name="PageFileSize"         value="6">
    439444      <desc>
    440445        Pagefile size in megabytes.
     
    20162021  <interface
    20172022     name="IMachine" extends="$unknown"
    2018      uuid="31f7169f-14da-4c55-8cb6-a3665186e35e"
     2023     uuid="dcfb87c4-18a9-4a1e-9b1f-6f68f920535b"
    20192024     wsmap="managed"
    20202025     >
     
    21632168
    21642169    <attribute name="memorySize" type="unsigned long">
    2165       <desc>Sytem memory size in megabytes.</desc>
     2170      <desc>System memory size in megabytes.</desc>
     2171    </attribute>
     2172
     2173    <attribute name="memoryBalloonSize" type="unsigned long">
     2174      <desc>Initial memory balloon size in megabytes.</desc>
    21662175    </attribute>
    21672176
  • trunk/src/VBox/Main/include/MachineImpl.h

    r4498 r4513  
    221221
    222222        ULONG          mMemorySize;
     223        ULONG          mMemoryBalloonSize;
    223224        ULONG          mVRAMSize;
    224225        ULONG          mMonitorCount;
     
    441442    STDMETHOD(COMGETTER(MemorySize))(ULONG *memorySize);
    442443    STDMETHOD(COMSETTER(MemorySize))(ULONG memorySize);
     444    STDMETHOD(COMGETTER(MemoryBalloonSize))(ULONG *memoryBalloonSize);
     445    STDMETHOD(COMSETTER(MemoryBalloonSize))(ULONG memoryBalloonSize);
    443446    STDMETHOD(COMGETTER(VRAMSize))(ULONG *memorySize);
    444447    STDMETHOD(COMSETTER(VRAMSize))(ULONG memorySize);
  • trunk/src/VBox/Main/xml/VirtualBox-settings-common.xsd

    r4498 r4513  
    383383</xsd:complexType>
    384384
     385<xsd:complexType name="TGuest">
     386  <xsd:attribute name="MemoryBalloonSize" type="xsd:unsignedInt" default="0"/>
     387</xsd:complexType>
     388
    385389<xsd:complexType name="TBoot">
    386390  <xsd:sequence>
     
    662666    <xsd:element name="ExtraData" type="TExtraData" minOccurs="0"/>
    663667    <xsd:element name="Snapshot" type="TSnapshot" minOccurs="0"/>
     668    <xsd:element name="Guest" type="TGuest" minOccurs="0"/>
    664669  </xsd:all>
    665670  <xsd:attribute name="name" type="TNonEmptyString" use="required"/>
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