X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=src%2Fvogleditor%2Fvogleditor_qapicalltreemodel.cpp;h=e661f1cdd8fd217e0b5397711dfea99e49643c96;hb=406ad78f7c0f904c1f7c00dddd51c8e98e83ccfa;hp=28e7e380aa99d070f8fbac34b89a980e5bb8e958;hpb=9bf37d3d589b8a8b92345872a48bcb5669fcdc48;p=vogl diff --git a/src/vogleditor/vogleditor_qapicalltreemodel.cpp b/src/vogleditor/vogleditor_qapicalltreemodel.cpp index 28e7e38..e661f1c 100644 --- a/src/vogleditor/vogleditor_qapicalltreemodel.cpp +++ b/src/vogleditor/vogleditor_qapicalltreemodel.cpp @@ -72,8 +72,6 @@ void vogleditor_QApiCallTreeModel::setupModelData(vogl_trace_file_reader* pTrace m_trace_ctypes.init(pTrace_reader->get_sof_packet().m_pointer_sizes); - vogl_trace_packet trace_packet(&m_trace_ctypes); - for ( ; ; ) { vogl_trace_file_reader::trace_file_reader_status_t read_status = pTrace_reader->read_next_packet(); @@ -97,7 +95,9 @@ void vogleditor_QApiCallTreeModel::setupModelData(vogl_trace_file_reader* pTrace if (pTrace_reader->get_packet_type() == cTSPTGLEntrypoint) { - if (!trace_packet.deserialize(pTrace_reader->get_packet_buf().get_ptr(), pTrace_reader->get_packet_buf().size(), false)) + vogl_trace_packet* pTrace_packet = vogl_new(vogl_trace_packet, &m_trace_ctypes); + + if (!pTrace_packet->deserialize(pTrace_reader->get_packet_buf().get_ptr(), pTrace_reader->get_packet_buf().size(), false)) { console::error("%s: Failed parsing GL entrypoint packet\n", VOGL_FUNCTION_NAME); break; @@ -111,12 +111,12 @@ void vogleditor_QApiCallTreeModel::setupModelData(vogl_trace_file_reader* pTrace // Check if this is a state snapshot. // This is entirely optional since the client is designed to dynamically get new snapshots // if they don't exist. - GLuint cmd = trace_packet.get_param_value(0); - GLuint size = trace_packet.get_param_value(1); VOGL_NOTE_UNUSED(size); + GLuint cmd = pTrace_packet->get_param_value(0); + GLuint size = pTrace_packet->get_param_value(1); VOGL_NOTE_UNUSED(size); if (cmd == cITCRKeyValueMap) { - key_value_map &kvm = trace_packet.get_key_value_map(); + key_value_map &kvm = pTrace_packet->get_key_value_map(); dynamic_string cmd_type(kvm.get_string("command_type")); if (cmd_type == "state_snapshot") @@ -172,23 +172,23 @@ void vogleditor_QApiCallTreeModel::setupModelData(vogl_trace_file_reader* pTrace // format parameters funcCall.append("( "); dynamic_string paramStr; - for (uint param_index = 0; param_index < trace_packet.total_params(); param_index++) + for (uint param_index = 0; param_index < pTrace_packet->total_params(); param_index++) { if (param_index != 0) funcCall.append(", "); paramStr.clear(); - trace_packet.pretty_print_param(paramStr, param_index, false); + pTrace_packet->pretty_print_param(paramStr, param_index, false); funcCall.append(paramStr.c_str()); } funcCall.append(" )"); - if (trace_packet.has_return_value()) + if (pTrace_packet->has_return_value()) { funcCall.append(" = "); paramStr.clear(); - trace_packet.pretty_print_return_value(paramStr, false); + pTrace_packet->pretty_print_return_value(paramStr, false); funcCall.append(paramStr.c_str()); } @@ -197,7 +197,7 @@ void vogleditor_QApiCallTreeModel::setupModelData(vogl_trace_file_reader* pTrace if (pCurFrame == NULL) { pCurFrame = new vogleditor_frameItem(total_swaps); - vogleditor_apiCallTreeItem* pNewFrameNode = new vogleditor_apiCallTreeItem(pCurFrame, pCurParent); + vogleditor_apiCallTreeItem* pNewFrameNode = vogl_new(vogleditor_apiCallTreeItem, pCurFrame, pCurParent); pCurParent->appendChild(pNewFrameNode); m_itemList.append(pNewFrameNode); @@ -212,7 +212,7 @@ void vogleditor_QApiCallTreeModel::setupModelData(vogl_trace_file_reader* pTrace } // make item and node for the api call - vogleditor_apiCallItem* pCallItem = new vogleditor_apiCallItem(pCurFrame, trace_packet, *pGL_packet); + vogleditor_apiCallItem* pCallItem = vogl_new(vogleditor_apiCallItem, pCurFrame, pTrace_packet, *pGL_packet); pCurFrame->appendCall(pCallItem); if (pPendingSnapshot != NULL) @@ -221,7 +221,7 @@ void vogleditor_QApiCallTreeModel::setupModelData(vogl_trace_file_reader* pTrace pPendingSnapshot = NULL; } - vogleditor_apiCallTreeItem* item = new vogleditor_apiCallTreeItem(funcCall, pCallItem, pCurParent); + vogleditor_apiCallTreeItem* item = vogl_new(vogleditor_apiCallTreeItem, funcCall, pCallItem, pCurParent); pCurParent->appendChild(item); m_itemList.append(item); @@ -312,9 +312,23 @@ QVariant vogleditor_QApiCallTreeModel::data(const QModelIndex &index, int role) if (!index.isValid()) return QVariant(); - vogleditor_apiCallTreeItem *item = static_cast(index.internalPointer()); + vogleditor_apiCallTreeItem* pItem = static_cast(index.internalPointer()); + + // highlight the API call cell if it has a substring which matches the searchString + if (role == Qt::BackgroundRole && index.column() == VOGL_ACTC_APICALL) + { + if (!m_searchString.isEmpty()) + { + QVariant data = pItem->columnData(VOGL_ACTC_APICALL, Qt::DisplayRole); + QString string = data.toString(); + if (string.contains(m_searchString, Qt::CaseInsensitive)) + { + return QColor(Qt::yellow); + } + } + } - return item->columnData(index.column(), role); + return pItem->columnData(index.column(), role); } Qt::ItemFlags vogleditor_QApiCallTreeModel::flags(const QModelIndex &index) const @@ -334,44 +348,35 @@ QVariant vogleditor_QApiCallTreeModel::headerData(int section, Qt::Orientation o return QVariant(); } -QModelIndexList vogleditor_QApiCallTreeModel::find_search_matches(const QString searchText) +void vogleditor_QApiCallTreeModel::set_highlight_search_string(const QString searchString) +{ + m_searchString = searchString; +} + +QModelIndex vogleditor_QApiCallTreeModel::find_prev_search_result(vogleditor_apiCallTreeItem* start, const QString searchText) { QLinkedListIterator iter(m_itemList); - QModelIndexList matches; - // iterate through all items and find matching text - while (iter.hasNext()) + if (start != NULL) { - vogleditor_apiCallTreeItem* pItem = iter.peekNext(); - QVariant data = pItem->columnData(VOGL_ACTC_APICALL, Qt::DisplayRole); - QString string = data.toString(); - if (string.contains(searchText, Qt::CaseInsensitive)) + if (iter.findNext(start) == false) { - matches.push_back(indexOf(pItem)); + // the object wasn't found in the list, so return a default (invalid) item + return QModelIndex(); } - iter.next(); + // need to back up past the current item + iter.previous(); } - - return matches; -} - -QModelIndex vogleditor_QApiCallTreeModel::find_prev_search_result(vogleditor_apiCallTreeItem* start, const QString searchText) -{ - QLinkedListIterator iter(m_itemList); - - if (iter.findNext(start) == false) + else { - // the object wasn't found in the list, so just return the same item - return indexOf(start); + // set the iterator to the back so that searching starts from the end of the list + iter.toBack(); } - // need to back up past the current item - iter.previous(); - // now the iterator is pointing to the desired start object in the list, // continually check the prev item and find one with a snapshot - vogleditor_apiCallTreeItem* pFound = start; + vogleditor_apiCallTreeItem* pFound = NULL; while (iter.hasPrevious()) { vogleditor_apiCallTreeItem* pItem = iter.peekPrevious(); @@ -391,18 +396,20 @@ QModelIndex vogleditor_QApiCallTreeModel::find_prev_search_result(vogleditor_api QModelIndex vogleditor_QApiCallTreeModel::find_next_search_result(vogleditor_apiCallTreeItem* start, const QString searchText) { - QLinkedListIterator iter(m_itemList); - if (iter.findNext(start) == false) + if (start != NULL) { - // the object wasn't found in the list, so just return the same item - return indexOf(start); + if (iter.findNext(start) == false) + { + // the object wasn't found in the list, so return a default (invalid) item + return QModelIndex(); + } } // now the iterator is pointing to the desired start object in the list, // continually check the next item and find one with a snapshot - vogleditor_apiCallTreeItem* pFound = start; + vogleditor_apiCallTreeItem* pFound = NULL; while (iter.hasNext()) { vogleditor_apiCallTreeItem* pItem = iter.peekNext(); @@ -424,18 +431,26 @@ vogleditor_apiCallTreeItem* vogleditor_QApiCallTreeModel::find_prev_snapshot(vog { QLinkedListIterator iter(m_itemList); - if (iter.findNext(start) == false) + if (start != NULL) { - // the object wasn't found in the list, so just return the same item - return start; - } + if (iter.findNext(start) == false) + { + // the object wasn't found in the list + return NULL; + } - // need to back up past the current item - iter.previous(); + // need to back up past the current item + iter.previous(); + } + else + { + // set the iterator to the back so that searching starts from the end of the list + iter.toBack(); + } // now the iterator is pointing to the desired start object in the list, // continually check the prev item and find one with a snapshot - vogleditor_apiCallTreeItem* pFound = start; + vogleditor_apiCallTreeItem* pFound = NULL; while (iter.hasPrevious()) { if (iter.peekPrevious()->has_snapshot()) @@ -459,14 +474,14 @@ vogleditor_apiCallTreeItem* vogleditor_QApiCallTreeModel::find_next_snapshot(vog { if (iter.findNext(start) == false) { - // the object wasn't found in the list, so just return the same item - return start; + // the object wasn't found in the list + return NULL; } } // now the iterator is pointing to the desired start object in the list, // continually check the next item and find one with a snapshot - vogleditor_apiCallTreeItem* pFound = start; + vogleditor_apiCallTreeItem* pFound = NULL; while (iter.hasNext()) { if (iter.peekNext()->has_snapshot()) @@ -486,18 +501,26 @@ vogleditor_apiCallTreeItem *vogleditor_QApiCallTreeModel::find_prev_drawcall(vog { QLinkedListIterator iter(m_itemList); - if (iter.findNext(start) == false) + if (start != NULL) { - // the object wasn't found in the list, so just return the same item - return start; - } + if (iter.findNext(start) == false) + { + // the object wasn't found in the list + return NULL; + } - // need to back up past the current item - iter.previous(); + // need to back up past the current item + iter.previous(); + } + else + { + // set the iterator to the back so that searching starts from the end of the list + iter.toBack(); + } // now the iterator is pointing to the desired start object in the list, // continually check the prev item and find one with a snapshot - vogleditor_apiCallTreeItem* pFound = start; + vogleditor_apiCallTreeItem* pFound = NULL; while (iter.hasPrevious()) { vogleditor_apiCallTreeItem* pItem = iter.peekPrevious(); @@ -524,13 +547,13 @@ vogleditor_apiCallTreeItem *vogleditor_QApiCallTreeModel::find_next_drawcall(vog if (iter.findNext(start) == false) { - // the object wasn't found in the list, so just return the same item - return start; + // the object wasn't found in the list + return NULL; } // now the iterator is pointing to the desired start object in the list, // continually check the next item and find one with a snapshot - vogleditor_apiCallTreeItem* pFound = start; + vogleditor_apiCallTreeItem* pFound = NULL; while (iter.hasNext()) { vogleditor_apiCallTreeItem* pItem = iter.peekNext();