Ejemplo n.º 1
0
/**
 * Add a new message to the log
 */
void MenuHUDLog::add(const std::string& s, bool prevent_spam) {
	hide_overlay = false;

	// Make sure we don't spam the same message repeatedly
	if (log_msg.empty() || log_msg.back() != s || !prevent_spam) {
		// add new message
		log_msg.push_back(substituteVarsInString(s, pc));
		msg_age.push_back(calcDuration(log_msg.back()));

		// render the log entry and store it in a buffer
		font->setFont("font_regular");
		Point size = font->calc_size(log_msg.back(), window_area.w - (paragraph_spacing*2));
		Image *graphics = render_device->createImage(size.x, size.y);
		font->renderShadowed(log_msg.back(), 0, 0, JUSTIFY_LEFT, graphics, window_area.w - (paragraph_spacing*2), color_normal);
		msg_buffer.push_back(graphics->createSprite());
		graphics->unref();
	}
	else if (!msg_age.empty()) {
		msg_age.back() = calcDuration(log_msg.back());
	}

	// force HUD messages to vanish in order
	if (msg_age.size() > 1) {
		const size_t last = msg_age.size()-1;
		if (msg_age[last] < msg_age[last-1])
			msg_age[last] = msg_age[last-1];
	}

}
Ejemplo n.º 2
0
void TimelineItem::updateDuration() const
{
	if( mDirtyDuration ) {
		mDuration = std::max( calcDuration(), 0.0f );
		mInvDuration = ( mDuration == 0 ) ? 1.0f : ( 1.0f / mDuration );
		mDirtyDuration = false;
	}
}
Ejemplo n.º 3
0
void LogManager::calcStatistic()
{
	int len = events.size();
	totaltime = GetTimeDifference(toSystemTime(events[0].timestamp),toSystemTime(events[len-1].timestamp));
	
	EventProcess p(events[0].processName); p.from = 0;
	vector<LogEvent> keys;
	bool hasPushCtrl = false;
	for(int i=0; i<len-1; i++)
	{
		//LogEvent e = events[i];
		
		events[i].duration = GetTimeDifference(toSystemTime(events[i].timestamp),toSystemTime(events[i+1].timestamp));
		if(events[i].isHasAcc) 
		{
			accui_events.push_back(i);

			string acc_name = events[i].acc.name;
			std::transform(acc_name.begin(), acc_name.end(), acc_name.begin(), ::tolower);
			int acc_index = acc_name.find("paste");
			if(acc_index>=0 && events[i].acc.type == "menu item")
			{
				PasteEvent pe;
				pe.timestamp = events[i].timestamp;
				pe.windowName = events[i].windowName;
				pe.processName = events[i].processName;
				pe.parentWindowName = events[i].parentWindowName;
				pe.method = "Menu -> Paste";
				paste_events.push_back(pe);
			}
		}

		if(events[i].isHasSrceenshot)
		{
			screenshot_events.push_back(i);
		}

		process_set.insert(events[i].processName);
		window_set.insert(events[i].windowName);
		//events_map[events[i].timestamp] = i;
		
		if(events[i].eventType == "keyinput")
		{
			if(hasPushCtrl)
			{
				keys.push_back(events[i]);
				if(events[i].name != "Ctrl" && events[i].name != "Shift" && events[i].name != "Alt")
				{
					hasPushCtrl = false;
					keyEvents.push_back(keys);

					string keystr = this->keysToString(keys);
					if(keystr == "Ctrl+V")
					{
						PasteEvent pe;
						pe.timestamp = keys[0].timestamp;
						pe.windowName = keys[0].windowName;
						pe.processName = keys[0].processName;
						pe.parentWindowName = keys[0].parentWindowName;
						pe.method = keystr;
						paste_events.push_back(pe);
					}
					keys = vector<LogEvent>();
				}
			}
			else
			{
				if(events[i].name == "Ctrl")
				{
					hasPushCtrl = true;
					keys.push_back(events[i]);
				}
				else if(events[i].name.size()>1 && events[i].name.substr(0,1) == "F")
				{
					keys.push_back(events[i]);
					keyEvents.push_back(keys);
					keys = vector<LogEvent>();
				}
				else
				{
					if(keys.size()>0)
					{
						keyEvents.push_back(keys);
						keys = vector<LogEvent>();
					}
				}
			}
			
		}

		if(i>0)
		{
			if(events[i].processName != p.name)
			{
				p.to = i - 1;

				if(process_stat.find(p.name) != process_stat.end())
				{
					process_stat[p.name] += calcDuration(p.from, p.to);
				}
				else
				{
					process_stat[p.name] = calcDuration(p.from, p.to);
				}

				processes.push_back(p);
				p = EventProcess(events[i].processName);
				p.from = i;
			}
			
		}
	}

	p.to = len - 1;
	processes.push_back(p);
}