示例#1
0
void
memobj_init(void)
{
	unsigned long min_bytes, max_bytes;
	unsigned long mem_bytes = GetPhysicalPages() * 0.90 * TILT_PAGESIZE;
	unsigned long cache_bytes = GetBcacheSize() * 2;

	min_bytes = 2048 * 1024;
	min_bytes = Max(min_bytes, cache_bytes);

	max_bytes = (unsigned long)INT_MAX;
	max_bytes = Min(max_bytes, mem_bytes);
	max_bytes = Min(max_bytes, rlimit(RLIMIT_DATA));
	max_bytes = Min(max_bytes, rlimit(RLIMIT_AS));
#ifdef RLIMIT_VMEM
	max_bytes = Min(max_bytes, rlimit(RLIMIT_VMEM));
#endif

	init_int(&MinHeapByte, min_bytes);
	init_int(&MaxHeapByte, 0.40 * max_bytes);
	assert(MinHeapByte <= MaxHeapByte);

#ifdef sparc
	assert(TILT_PAGESIZE == sysconf(_SC_PAGESIZE));
#else
	assert(TILT_PAGESIZE == sysconf(_SC_PAGE_SIZE));
#endif
	StackInitialize();
	HeapInitialize();
	GuardStackletSize = TILT_PAGESIZE / kilobyte;
	stackletOffset = (GuardStackletSize + MLStackletSize + CStackletSize) *
		kilobyte;
	primaryStackletOffset = 0;
	replicaStackletOffset = stackletOffset;
	/* So we don't pay mmap for first thread - general case? XXXX */
	{ 
		int i;
		Stacklet_t *temp[5];
		for (i=0; i<5; i++)
			temp[i] = Stacklet_Alloc(NULL);
		for (i=0; i<5; i++)
			Stacklet_Dealloc(temp[i]);
	}
}
示例#2
0
void	CTestPage::StartPlayback( void )
/////////////////////////////////////////////////////////////////////////////
{
	ULONG	ulBytesRequested, ulCircularBufferSize, ulBytesTransfered;
	LONG	lBufferSize;
	PHALWAVEDEVICE	pHD;
	PWAVEFORMATEX	pFormatEx;

	if( m_nPlayMode != MODE_STOP )
		return;

	m_nPlayDevice = m_PlayDevice.GetCurSel();

	DPF(("Starting Play Device %d\n", m_nPlayDevice ));

	pHD = m_pHalAdapter->GetWaveOutDevice( m_nPlayDevice );

	if( !m_WavePlayFile.Open( m_szFileName, MMIO_READ ) )
	{
		DPF(("Open Failed!\n"));
		return;
	}

	if( !m_WavePlayFile.ReadHeader() )
	{
		DPF(("ReadHeader Failed!\n"));
		return;
	}
	pFormatEx = m_WavePlayFile.GetFormat();

	//DPF(("SetFormat\n"));
	pHD->SetFormat( pFormatEx->wFormatTag, pFormatEx->nChannels, pFormatEx->nSamplesPerSec, pFormatEx->wBitsPerSample, pFormatEx->nBlockAlign );

	m_lSampleRate = pFormatEx->nSamplesPerSec;

	// Get the amount of free space on device
	//DPF(("GetTransferSize\n"));
	pHD->GetTransferSize( &ulBytesRequested, &ulCircularBufferSize );
	ulCircularBufferSize += sizeof(DWORD);
	m_ulPlayBufferSize = ulCircularBufferSize;

	m_pPlayBuffer = malloc( m_ulPlayBufferSize );
	m_ulPlayBufferPages = GetNumberOfPhysicalPages( m_pPlayBuffer, m_ulPlayBufferSize );
	GetPhysicalPages( m_pPlayBuffer, m_ulPlayBufferSize, &m_ulPlayBufferPages, m_Pages );
	
	//DPF(("ReadBlock %ld\n", ulBytesRequested ));
	lBufferSize = m_WavePlayFile.ReadBlock( (HPSTR)m_pPlayBuffer, ulBytesRequested );
	if( lBufferSize == -1 )
	{
		DPF(("ReadBlock Failed!\n"));
		return;
	}
	//lBufferSize = ulBytesRequested;

	// only call the hal if we have audio to transfer
	if( lBufferSize )
	{
		DPF(("T [%ld]", lBufferSize ));
		pHD->TransferAudio( m_pPlayBuffer, lBufferSize, &ulBytesTransfered );
		//DPF(("Write %ld\n", ulBytesTransfered ));
	}
	
	// make sure the limit register get set correctly
	//DPF(("TransferComplete\n"));
	pHD->TransferComplete( TRUE );
	
	// put the device in MODE_PLAY
	//DPF(("Start\n"));
	
	if( pHD->Start() )
	{
		DPF(("Start Failed!\n"));
	}

	// change the button to stop
	SetDlgItemText( IDC_PLAY, "Stop" );
	
	// set the mode to playing
	m_nPlayMode = MODE_RUN;
}