Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

106 lines
2.6 KiB

//+----------------------------------------------------------------------------
//
// File: IdleStat.cpp
//
// Module: CMMON32.EXE
//
// Synopsis: Implementation of class CIdleStatistics
//
// Copyright (c) 1998-1999 Microsoft Corporation
//
// Author: Fengsun Created 10/01/97
//
//+----------------------------------------------------------------------------
#include "cmmaster.h"
#include "IdleStat.h"
//+---------------------------------------------------------------------------
//
// CIdleStatistics::Start()
//
// Synopsis: Start the idle statistics
//
// Arguments: dwThreshold: The idle threshold. Traffic in a minute Less than
// the threshold is considered idle
// dwTimeOut: Idle time out in minisecond
//
// History: fengsun created on 10/1/97
//
//----------------------------------------------------------------------------
void CIdleStatistics::Start(DWORD dwThreshold, DWORD dwTimeOut)
{
MYDBGASSERT(dwTimeOut != 0);
m_dwThreshold = dwThreshold;
m_dwTimeOut = dwTimeOut;
m_dwStartIdleTime = 0;
m_DataPointsRing.Reset();
}
//+---------------------------------------------------------------------------
//
// CIdleStatistics::UpdateEveryInterval()
//
// Synopsis: This function should be call every Interval with a updated statistic
//
// Arguments: dwTraffic: the updated statistics
//
//
// History: fengsun created on 10/1/97
//
//----------------------------------------------------------------------------
void CIdleStatistics::UpdateEveryInterval(DWORD dwTraffic)
{
DWORD dwLast = m_DataPointsRing.GetOldest();
m_DataPointsRing.Add(dwTraffic);
if (dwLast == 0) // Started less than a minute
{
return;
}
if (dwTraffic - dwLast > m_dwThreshold)
{
//
// Not idle
//
m_dwStartIdleTime = 0;
}
else
{
if (m_dwStartIdleTime == 0)
{
//
// We are already idle for 1 minute
//
m_dwStartIdleTime = GetTickCount() - IDLE_INTERVAL;
}
}
}
#ifdef DEBUG
//+----------------------------------------------------------------------------
//
// Function: CIdleStatistics::AssertValid
//
// Synopsis: For debug purpose only, assert the object is valid
//
// Arguments: None
//
// Returns: Nothing
//
// History: Created Header 2/12/98
//
//+----------------------------------------------------------------------------
void CIdleStatistics::AssertValid() const
{
MYDBGASSERT(m_dwTimeOut <10000*60*1000); // less than 10000 minutes
MYDBGASSERT(m_dwThreshold <= 64*1024);
ASSERT_VALID(&m_DataPointsRing);
}
#endif