diff -r e375a7921169 -r 57c618273d5c fbs/fontandbitmapserver/utils/threadname.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/fbs/fontandbitmapserver/utils/threadname.py Thu Aug 19 11:11:18 2010 +0300 @@ -0,0 +1,76 @@ +# Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). +# All rights reserved. +# This component and the accompanying materials are made available +# under the terms of "Eclipse Public License v1.0" +# which accompanies this distribution, and is available +# at the URL "http://www.eclipse.org/legal/epl-v10.html". +# +# Initial Contributors: +# Nokia Corporation - initial contribution. +# +# Contributors: +# +# Description: +# Utility function to append thread names where the Thread Id maps to a known thread/process name. + +import re + +# Takes as input list which contains OST traces from the SYMBIAN_KERNEL_THREAD_IDENTIFICATION trace group in Symbian +# BTrace Hooks OST dictionary. Returns a list with the same content as with thread names appended. +def addnames(data): + result = [] + processNames = {} + threadNames = {} + rthreadIds = {} + + for line in data: + pattern = "^.*Thread:Process name assigned;NThread:(.*);DProcess:(.*);Name:(.*)$" + matched = re.search(pattern, line) + if matched: + processNames[matched.group(2)] = matched.group(3) + + pattern = "^.*Thread:Thread created;NThread:(.*);DProcess:(.*);Name:(.*)$" + matched = re.search(pattern, line) + if matched: + threadNames[matched.group(1)] = processNames[matched.group(2)]+":"+matched.group(3) + + pattern = "^.*Thread:Thread name assigned;NThread:(.*);DProcess:(.*);Name:(.*)$" + matched = re.search(pattern, line) + if matched: + threadNames[matched.group(1)] = processNames[matched.group(2)]+":"+matched.group(3) + + pattern = "^.*Thread:Thread ID assigned;NThread:(.*);DProcess:(.*);RThread ID:(\d*)$" + matched = re.search(pattern, line) + if matched: + rthreadIds[matched.group(3)] = matched.group(1) + + pattern = "(^.*Thread ID:)(\w*)(.*)$" + matched = re.search(pattern, line) + if matched: + threadId = matched.group(2) + if threadNames.has_key(threadId): + line = matched.group(1)+threadId+":"+threadNames[threadId]+matched.group(3) + + pattern = "(^.*clientThreadId )(\w*)(.*)$" + matched = re.search(pattern, line) + if matched: + rthreadIdHex = matched.group(2) + rthreadId = hex(rthreadIdHex) + if rthreadIds.has_key(rthreadId): + threadId = rthreadIds[rthreadId] + threadName = threadNames[threadId] + line = matched.group(1)+rthreadId+":"+threadName+matched.group(3) + + pattern = "(^.*threadId )(\w*)(.*)$" + matched = re.search(pattern, line) + if matched: + rthreadIdHex = matched.group(2) + rthreadId = hex(rthreadIdHex) + if rthreadIds.has_key(rthreadId): + threadId = rthreadIds[rthreadId] + threadName = threadNames[threadId] + line = matched.group(1)+rthreadId+":"+threadName+matched.group(3) + + result.append(line) + + return result \ No newline at end of file