コード例 #1
0
	//*************************************************************************
	// Method:		onCreateFault
	// Description: Called when a ui pane creates a fault
	//
	// Parameters:
	//	dataNode - the node to create
	//
	// Return Value: none
	//*************************************************************************
	void FaultPaneDataArray::onCreateFault(DisplayableDataNode *dataNode)
	{
		FaultPaneDataNode *faultNode = dynamic_cast <FaultPaneDataNode*> (dataNode);
		if (!faultNode)
			return;

		//retain a copy in dataarray for use when project pane makes a datanode copy
		faultNode->DataArray = faultNode;

		if (!faultNode->CreatedDelegate)
			return;
		else if (faultNode->processID == processID)
		{
			FaultFunctionDB *faultDB = FaultFunctionDB::GetInstance();
			IList *faults = faultDB->Faults;

			for (int i=0; i<faults->Count; i++)
			{
				Fault *fault = dynamic_cast <Fault*> (faults->Item[i]);
				
				if (FaultsMatch(faultNode, fault))
				{
					faultNode->FaultID = fault->FaultID;
					faultNode->ID = String::Concat(faultNode->processID.ToString(), faultNode->threadID.ToString(), faultNode->FaultID.ToString());
					break;
				}
			}

			if (faultNode->FaultID == -1)
				return;

			//if we are switching to a new fault, then delete the old one.
			if (FindFaultNode(faultNode->Type, faultNode->threadID))
			{
				internalDelete = true;
				onDeleteFault(faultNode);
				internalDelete = false;
			}			

			if (!this->itemList->Contains(faultNode->ID))
			{
				ArrayList *list = new ArrayList();
				list->Add(__box(faultNode->threadID));
				Array *threadList = list->ToArray();
				holoScriptApp->InjectFault(threadList, faultNode->FaultID);
				CreateDataNode(faultNode);
				Object *args[] = __gc new Object*[1];
				args[0] = faultNode;
				faultNode->CreatedDelegate->DynamicInvoke(args);
			}
			else
				return;

		}
	}
コード例 #2
0
ファイル: Perf.c プロジェクト: Kohrara/edk
EFI_STATUS
GetPeiPerformance (
  IN EFI_HANDLE           ImageHandle,
  IN EFI_SYSTEM_TABLE     *SystemTable,
  IN UINT64               Ticker
  )
/*++

Routine Description:

  Transfer PEI performance data to gauge data node.

Arguments:

  ImageHandle - Standard entry point parameter
  SystemTable - Standard entry point parameter
  Ticker      - Start tick

Returns:

  EFI_OUT_OF_RESOURCES - No enough resource to create data node.
  EFI_SUCCESS - Transfer done successfully.

--*/
{
  EFI_STATUS                        Status;
  VOID                              *HobList;
  EFI_HOB_GUID_DATA_PERFORMANCE_LOG *LogHob;
  PEI_PERFORMANCE_MEASURE_LOG_ENTRY *LogEntry;
  UINT32                            Index;
  EFI_PERF_DATA_LIST                *Node;
  UINT64                            TimerValue;

  Node = CreateDataNode (0, PEI_TOK, NULL);
  if (!Node) {
    return EFI_OUT_OF_RESOURCES;
  }

  if (Ticker != 0) {
    TimerValue = Ticker;
  } else {
    GetTimerValue (&TimerValue);
  }
  (Node->GaugeData).EndTick = TimerValue;

  InsertTailList (&mPerfDataHead, &(Node->Link));

  EfiLibGetSystemConfigurationTable (&gEfiHobListGuid, &HobList);
  do {
    Status = GetNextGuidHob (&HobList, &gEfiPeiPerformanceHobGuid, (VOID **) &LogHob, NULL);
    if (EFI_ERROR (Status)) {
      break;
    }

    for (Index = 0; Index < LogHob->NumberOfEntries; Index++) {
      LogEntry  = &(LogHob->Log[Index]);
      Node      = CreateDataNode (0, LogEntry->DescriptionString, NULL);
      if (!Node) {
        return EFI_OUT_OF_RESOURCES;
      }
      (Node->GaugeData).StartTick = LogEntry->StartTimeCount;

      EfiCopyMem (&(Node->GaugeData.GuidName), &LogEntry->Name, sizeof (EFI_GUID));

      InsertTailList (&mPerfDataHead, &(Node->Link));

      (Node->GaugeData).EndTick = LogEntry->StopTimeCount;
    }
  } while (!EFI_ERROR (Status));

  return EFI_SUCCESS;
}
コード例 #3
0
ファイル: Perf.c プロジェクト: Kohrara/edk
EFI_STATUS
EFIAPI
StartGauge (
  IN EFI_PERFORMANCE_PROTOCOL         *This,
  IN EFI_HANDLE                       Handle,
  IN UINT16                           *Token,
  IN UINT16                           *Host,
  IN UINT64                           Ticker
  )
/*++

Routine Description:

  Create a guage data node and initialized it.

Arguments:

  This    - Calling context
  Handle  - Handle of gauge data
  Token   - Token of gauge data
  Host    - Host of gauge data
  Ticker  - Set gauge data's StartTick. If 0, StartTick is current timer.

Returns:

  EFI_SUCCESS     - Successfully create and initialized a guage data node.
  EFI_OUT_OF_RESOURCES  - No enough resource to create a guage data node.

--*/
{
  EFI_PERFORMANCE_INSTANCE  *PerfInstance;
  EFI_PERF_DATA_LIST        *Node;
  UINT64                    TimerValue;

  TimerValue    = 0;
  PerfInstance  = EFI_PERFORMANCE_FROM_THIS (This);

  Node          = CreateDataNode (Handle, Token, Host);
  if (!Node) {
    return EFI_OUT_OF_RESOURCES;
  }

  if (Ticker != 0) {
    TimerValue = Ticker;
  } else {
    GetTimerValue (&TimerValue);
  }

  Node->GaugeData.StartTick = TimerValue;

  if (!EfiStrCmp (Token, DXE_TOK)) {
    PerfInstance->Phase = DXE_PHASE;
  }

  if (!EfiStrCmp (Token, SHELL_TOK)) {
    PerfInstance->Phase = SHELL_PHASE;
  }

  Node->GaugeData.Phase = PerfInstance->Phase;

  InsertTailList (&mPerfDataHead, &(Node->Link));

  return EFI_SUCCESS;
}