src/TraceEvent/TraceLog.cs (66 lines): - line 297: // TODO this can probably be made more efficient. - line 524: // TODO: All the IFastSerializable parts of this are discarded, which is unfortunate. - line 661: // TODO review. - line 718: // TODO optimize for sequential access. - line 761: // TODO optimize for sequential access. - line 867: // TODO optimize for sequential access. - line 878: // TODO expose this publicly? - line 890: // TODO copy the additional data from a ETLX file if the source is ETLX - line 912: // TODO add an option that allows users to add their own here. - line 1115: // TODO: I have given up for now. IN addition to the events with LogCodeAddress, you also need any event with FixupData() - line 1263: // TODO is this a good idea? It tries to undo the anonimization a bit. - line 1276: // TODO review: is using the timestamp the best way to make the association - line 1439: #if false // TODO this is a hack for VS traces that only did DCStarts but no DCStops. - line 2140: // TODO FIX NOW hack because unloadMethod not present - line 2679: // TODO can be optimized to never allocate the incomplete stack. - line 2710: // TODO can be optimized to never allocate the incomplete stack. - line 2957: return ip >= 0xFFFF000000000000; // TODO I don't know what the true cutoff is. - line 2978: // TODO Debug.Assert(stackRecord->MatchId == 0); - line 3071: // TODO This is a bit of a hack. We wack this field in place. - line 3090: // TODO This is a bit of a hack. We wack this field in place. - line 3155: // TODO: currently most uses the source aligned so - line 3254: // TODO error conditions. - line 3260: // TODO completely empty logs. - line 3352: // TODO FIX NOW ACTIVITIES: review - line 3460: // TODO this needs to be a runtime error, not an assert. - line 3758: lazyEventsToStacks.FinishRead(); // TODO REMOVE - line 3779: lazyCswitchBlockingEventsToStacks.FinishRead(); // TODO REMOVE - line 3800: lazyEventsToCodeAddresses.FinishRead(); // TODO REMOVE - line 3867: // TODO: we add 16 just to keep compatibility with the size we used before. This is a complete - line 3905: // TODO FIX NOW remove the jittedMethods ones. - line 4325: // to do the lookup. TODO: is there a better way? - line 4363: #if false // TODO FIX NOW use or remove 4/2014 - line 4364: // TODO FIX NOW ACTIVITIES: review - line 4829: // TODO put in GUID, ID? - line 5099: #if false // TODO FIX NOW remove or fix - line 5100: // TODO 50000000 arbitrary. Fix underlying problem with merged ETL files. - line 5144: // TODO confirm this works with nested predicates - line 5197: // TODO confirm this works with nested predicates - line 5826: // TODO FIX NOW ACTIVITIES: if this is only used during translation, we should not allocate it in the ctor - line 6688: // TODO we get different prefixes. skip it - line 6696: /* TODO this one fails. decide what to do about it. - line 6729: // TODO there seem to be unmatched unloads in many traces. This has make this diagnostic too noisy. - line 6824: // TODO factor this with the unmanaged case. - line 7007: #if false // TODO FIX NOW enable fails on eventSourceDemo.etl file - line 7147: // TODO: provide a way of getting at all the loaded images. - line 7286: // TODO use or remove - line 7605: lazyCallStacks.FinishRead(); // TODO REMOVE - line 7883: // sort them. TODO can we get away without this? - line 7923: // TODO find out why this happens? I think this is because we try to do a ReadRVA - line 7994: // TODO FIX NOW work for any assembly, not just he corresponding IL assembly. - line 8017: // TODO FIX NOW, deal with this rather than simply warn. - line 8056: // TODO remove after we are happy that this works properly. - line 8230: /* TODO FIX NOW decide what to do here */ - line 8367: // TODO do we need this? - line 8434: // TODO too strong. - line 8478: // TODO number of args is getting messy. - line 8534: // TODO FIX NOW - line 8536: // TODO FIX NOW - line 8539: // TODO FIX NOW remove - line 8810: lazyCodeAddresses.FinishRead(); // TODO REMOVE - line 9195: // TODO This probably does not belong here, but I only want to this if the IL deltas are going up. - line 9629: lazyMethods.FinishRead(); // TODO REMOVE - line 9898: // TODO review the imageBase == 0 condition. Needed to get PDB signature on managed IL. - line 10341: // TODO make public? - line 10359: /// TODO: eliminate and use ToString()? - line 10463: // TODO FIX NOW use or remove ! src/TraceEvent/Parsers/KernelTraceEventParser.cs (58 lines): - line 25: // TODO I have low confidence in the TCP headers, especially for Versions < 2 (how much do we care?) - line 82: /// Logs process performance counters (TODO When?) (Vista+ only) - line 168: /// Good default kernel flags. (TODO more detail) - line 255: // TODO FIX NOW, need to make it so that this is bounded. - line 276: // TODO this does now work for DCStarts. Do DCStarts event exist? - line 1998: // TODO FIX NOW, this easily may not be correct. - line 2024: // TODO FIX NOW, this easily may not be correct. - line 2087: // TODO Added by hand without proper body decode. - line 2318: #if false // TODO FIX NOW remove (it is not used and is not following conventions on array fields. - line 3467: // TODO confirm that you are on the local machine before initializing in this way. - line 3779: // TODO fix - line 3941: Debug.Assert(!(Version == 0 && EventDataLength < SkipUTF8String(SkipSID(HostOffset(8, 2))))); // TODO fixed by hand - line 3942: Debug.Assert(!(Version == 1 && EventDataLength < SkipUTF8String(SkipSID((Version >= 3) ? HostOffset(24, 2) : HostOffset(20, 1))))); // TODO fixed by hand - line 3947: // TODO version 5 seesm to have put 8 bytes after it (on 32 bit, maybe more on 64 bit. - line 4224: Debug.Assert(!(Version == 1 && EventDataLength < 8)); // TODO fixed by hand (can be better) - line 4345: // TODO is this one worth resolving? - line 4439: // TODO figure out which one of these are right - line 4902: // TODO FIX NOW Version 3 is smaller. Debug.Assert(!(Version > 2 && EventDataLength < HostOffset(17, 1))); - line 5394: // TODO you can get service time (what XPERF gives) by taking the minimum of - line 6070: // TODO All of this logic is suspect. it could use a careful review. - line 6170: // TODO confirm this is true - line 6364: // TODO I am not actually that certain of this parsing. Which Version ByteOffset got put in, and what the layout is on 32 bit. - line 6620: /// TODO FIX NOW: these have not been validated yet. - line 6792: Debug.Assert(!(Version == 3 && EventDataLength < HostOffset(32, 3))); // TODO changed to <. observed 48 byte length on 64 bit (1 dword more) - line 7209: //Debug.Assert(!(Version == 1 && EventDataLength < HostOffset(28, 1))); // TODO fixed by hand - line 7350: // TODO not quite right for V0 TcpIP (does anyone care?) - line 7454: // TODO not quite right for V0 TcpIP (does anyone care?) - line 7911: Debug.Assert(!(Version == 0 && EventDataLength < HostOffset(20, 1))); // TODO fixed by hand - line 7912: Debug.Assert(!(Version == 1 && EventDataLength < 20)); // TODO fixed by hand - line 8138: /// TODO: daylight savings time seems to mess this up. - line 8498: // TODO FIX NOW. Probably not right since it is only valid for PageKind==File - line 8528: // TODO FIX NOW. reenable this assert (we get 24 on a 32 bit process) - line 8826: // TODO is this a good idea? - line 9106: // TODO complete: MemInfo, TimeDateStamp, FreePages, Standby7, Standby6, Standby5, Standby4, Standby3, Standby2, Standby1, Standby0, TotalStandby, ModifiedPages, InUsePages, RepurposedPages - line 9977: /// (TODO: always for the event that preceded it on the same thread)? - line 10632: Debug.Assert(!(Version == 0 && EventDataLength < HostOffset(800, 1))); // TODO hand changed - line 10633: Debug.Assert(!(Version == 1 && EventDataLength < HostOffset(800, 1))); // TODO hand changed - line 10729: Debug.Assert(!(Version == 0 && EventDataLength < 568)); // TODO changed by hand - line 10730: Debug.Assert(!(Version == 1 && EventDataLength < 568)); // TODO changed by hand - line 10845: Debug.Assert(!(Version == 0 && EventDataLength < 108)); // TODO fixed by hand - line 10846: Debug.Assert(!(Version == 1 && EventDataLength < 108)); // TODO fixed by hand - line 10847: Debug.Assert(!(Version == 2 && EventDataLength < 112)); // TODO fixed by hand - line 10949: Debug.Assert(!(Version == 0 && EventDataLength < 584)); // TODO changed by hand - line 10950: Debug.Assert(!(Version == 1 && EventDataLength < 584)); // TODO changed by hand - line 11119: // TODO does this need FixupData? - line 11138: Debug.Assert(!(Version == 0 && EventDataLength < 652)); // TODO fixed by hand - line 11139: Debug.Assert(!(Version == 1 && EventDataLength < 652)); // TODO fixed by hand - line 11201: // TODO does this need FixupData? - line 11295: // TODO hand modified. Fix for real - line 11706: // TODO Is this really a good idea? - line 11836: // TODO Confirm this is the target processID - line 11839: // TODO Confirm this is the target processID - line 11948: // TODO Is this really a good idea? - line 12120: /* TODO FIX NOW: How do we get the thread ID of who did the awakening? - line 12333: //TODO: Fill in - line 12866: //TODO: Fill in - line 12940: // TODO make an enum for SourceID these are the values. - line 13534: //TODO: Fill in src/PerfView/PerfViewData.cs (45 lines): - line 872: // TODO FIX NOW. WE need reference counting - line 2312: // TODO FIX NOW this is probably a hack? - line 2761: // TODO should it be summed over processes? - line 2775: // TODO compute the average weighted by time. - line 3205: // TODO is this too misleading? - line 3214: public int StartThreadID; // TODO remove? not clear it is interesting. - line 3217: public int StopThreadID; // TODO remove? not clear it is interesting. - line 3499: // TODO FIX NOW Need a way of viewing it. - line 3923: internal EventSource m_eventSource; // TODO internal is a hack - line 3974: // TODO not clear I want this method - line 3980: // TODO not clear I want this method (client could do it). - line 4016: // TODO Using the source name here is a bit of hack. Heap Allocations, however are already filtered to a process. - line 4056: // TODO This is probably a hack that it is here. - line 4068: // TODO FIX NOW don't throw exceptions, - line 4234: // TODO do better. - line 4288: // TODO: predicate not used - line 4724: // TODO I think we can remove this, because we no longer pin the async handle. - line 4834: return; // TODO WARN - line 4876: clrPrivate.GCPinObjectAtGCTime += objectAtGCTime; // TODO FIX NOW REMOVE AFTER PRIVATE IS GONE - line 4908: // TODO deal with nulling out. - line 4958: // TODO use the callback model. We seem to have an issue getting the names however. - line 5024: // TODO FIX NOW, investigate the missing events. All we know is that incs and dec are not - line 5098: #region TaskCCWQueryRuntimeClassNameArgs commented for a while. TODO: get type info from pdb - line 5140: // TODO should we keep track of the ref count and remove the entry when it drops past zero? - line 5228: // TODO This is a clone of the logic below, factor it. - line 5376: // TODO FIX NOW remove for debugging activity stuff. - line 5733: // TODO this is not really correct, it assumes process IDs < 64K and images bases don't use lower bits - line 5779: // TODO this code assumes that process launch is within 1 second and process IDs are not aggressively reused. - line 5897: // TODO this code assumes that process launch is within 1 second and process IDs are not aggressively reused. - line 6151: // TODO this is a clone of the free code. - line 7433: // TODO currently this is experimental enough that we don't show it publicly. - line 7588: // TODO see if we can get the buffer size out of the ETL file to give a good number in the message. - line 8032: // THis is present VMMAP behavior. TODO We should think about doing better. - line 8151: public override string[] FileExtensions { get { return new string[] { ".imageSize.xml", ".pdb.xml" }; } } // TODO remove pdb.xml after 1/2015 - line 8166: #if false // TODO FIX NOW remove - line 8197: // TODO FIX NOW var refGraph = new Experimental.RefGraph(graph); - line 8208: #if false // TODO FIX NOW remove - line 8244: #if false // TODO FIX NOW remove - line 8264: #if false // TODO FIX NOW: support post collection filtering? - line 8311: // TODO FIX NOW. This seems to be broken right now hiding it for now. - line 8346: // TODO this is kind of backwards. The super class should not know about the subclasses. - line 8426: #if false // TODO FIX NOW REMOVE - line 9442: if (m_pdbLookupFailures != null && m_pdbLookupFailures.ContainsKey(module.PdbGuid)) // TODO we are assuming unique PDB names (at least for failures). - line 9501: // TODO find out why this happens? I think this is because we try to do a ReadRVA - line 9675: // TODO: Directory.GetFile src/PerfView/StackViewer/StackWindow.xaml.cs (30 lines): - line 232: // TODO resolve the redundancy with DataSource. - line 251: // TODO - Currently nothing uses sampling. USE OR REMOVE - line 304: #if false // TODO decide if we want this. - line 309: // TODO there is a race here. In theory you could be aborting the wrong work. - line 373: // TODO: do we want to expose useWholeTraceMetric = false too? - line 460: // TODO this is a bit of a hack, as it might replace other instances of the string. - line 669: // TODO FIX NOW in case of duplicates - line 670: // TODO FIX NOW make this a utility function - line 768: // TODO FIX NOW, clone this for Forward too. - line 929: // TODO add all the other columns. - line 1013: // TODO this is a hack that this is here. - line 1085: // TODO FIX NOW make this work. - line 1097: // TODO do I need to do this off the GUI thread? - line 1387: // TODO support some sort of escape sequence - line 1711: str = AddSet(str, FilterParams.EscapeRegEx(cellStr)); // TODO need a good anchor - line 2078: // TODO we can do a better job here. If we have mulitple processe specs we simply don't focus right now. - line 2113: // TODO FIX NOW clean up symbols - line 2199: // TODO we can do a better job here. If we have multiple processes specs we simply don't focus right now. - line 2334: // TODO FIX NOW this is a hack - line 2361: // TODO FIX NOW review - line 2373: // TODO this can be reasonably expensive. If it is a problem do something about it (e.g. sampling) - line 3093: // We set the FilterGui state earlier so we don't set it here. TODO can we avoid this and keep it simpler? - line 3158: // TODO FIX NOW we don't remember the highlighted entry in the callers callees, or tree view. - line 3213: new InputGestureCollection() { new KeyGesture(Key.W, ModifierKeys.Alt) }); // TODO need multi-key shortcuts. - line 3319: // TODO: Gross that the caller has to pass this in. - line 3344: // TODO really should simply update Diff Menu lazily - line 3412: #if false // TODO FIX NOW remove - line 3553: // TODO see if we can use this in as many places as possible. - line 3698: // else if (NotesTab.IsSelected) // TODO FIX NOW implement find. - line 3851: // TODO should we bother? src/HeapDump/GCHeapDumper.cs (26 lines): - line 349: // TODO can we get rid of this? - line 422: /// TODO current does nothing. - line 856: // TODO Confirm this error code is what I think it is. - line 877: m_gcHeapDump.MemoryGraph = new MemoryGraph(10000); // TODO Can we be more accurate? - line 916: m_gcHeapDump.MemoryGraph = new MemoryGraph(10000); // TODO Can we be more accurate? - line 951: // TODO: Support SxS? - line 1262: // TODO FIX NOW, try clause is a hack because ccwInfo.* methods sometime throw. - line 1269: // TODO FIX NOW for some reason IUnknown is always 0 - line 1423: // Write out the dump (TODO we should do this incrementally). - line 1539: #if false // TODO FIX NOW remove - line 1779: // TODO this seems inefficient, can we get a list of RCWs? - line 1792: // TODO do we want the RefCnt Info? - line 1939: // TODO: should we do this all the time? - line 1944: // Only search for 100K pointer slots. TODO: should we have this limit? - line 1958: // TODO is this fetching an IntPtr at a time too expensive? - line 2271: #if false // TODO FIX NOW REMOVE - line 2441: // TODO this is a hack. - line 2594: proc.Stop(5000); // TODO FIX NOW failure? - line 2716: Console.WriteLine("Error enumerating thread, continuing: {0}", e.Message); // TODO FIX NOW - line 2758: /// TODO contextsForThreadLocalVars is a bit ugly. - line 2771: proc.Stop(5000); // TODO FIX NOW failure? - line 2868: // TODO check the sig blob and filter non-ref types. - line 2912: Console.WriteLine("Error during static Enumeration ignoring: {0}", e.Message); // TODO FIX NOW - line 2943: moduleFilePath = "mscorlib.dll"; // TODO FIX NOW we need to do this better to get the full path. - line 3035: // Is it a generic type TODO better way of detecting? - line 3036: // TODO FIX NOW issue with nested generic types src/PerfView/MainWindow.xaml.cs (23 lines): - line 23: /* Master TODO list */ - line 788: // TODO FIX NOW. tutorial example, multiple module files for EXE - line 1049: // TODO FIX NOW do a better job keeping track of open windows - line 1250: // TODO FIX NOW. no longer a dialog, ensure that it is unique? - line 1279: // TODO FIX NOW use continuation instead - line 1352: // TODO FIX NOW, decide how I want this done. Do I select or do I use GetDataFielName - line 1359: // TODO this has a side effect... - line 1377: // TODO this has a side effect... - line 1384: // TODO we may be doing an unnecessary merge. - line 1402: // TODO this has a side effect... - line 1421: // TODO this has a side effect... - line 1428: // TODO make a command - line 1442: // TODO need count of all active children - line 1451: // TODO need count of all active children - line 1528: // TODO Currently even the internal Wiki is now a broken link, so simply give up for now. - line 1759: #if false // TODO FIX NOW this causes undesirable side effects of closing any opened tree nodes. Remove permanently. - line 1777: // TODO FIX NOW Actually keep track of open windows, also does not track open event windows. - line 1799: // TODO does not work with the unmerged files - line 2016: Environment.Exit(0); // TODO can we do this another way? - line 2039: new InputGestureCollection() { new KeyGesture(Key.Delete) }); // TODO is this shortcut a good idea? - line 2068: // TODO quoting quotes - line 2139: // TODO get item under cursor, not selected item - line 2150: // TODO should use SaveFileDialog sometimes. src/PerfView/CommandProcessor.cs (16 lines): - line 76: // TODO can we simpify? - line 115: // TODO allow users to specify the launch directory - line 644: // Turn on the new V4.5.1 ASP.Net EventSource (TODO Not clear we should do this, and how much to turn on). - line 645: // TODO turned on stacks for debugging probably should turn off in the long run. - line 738: // TODO should we have stacks on for everything? - line 802: // TODO this can be expensive. turned it down (not clear what we lose). - line 854: #if false // TODO FIX NOW remove - line 2423: /// TODO review, I don't really like this. - line 3135: // TODO FIX NOW this is sort ugly fix is so that commands are an enum - line 3325: // We turn on stacks for the project N provider to get allocation tick events (TODO use event options to limit) - line 3625: /// TODO FIX NOW document - line 3726: // TODO FIX so that it works with things with commas and colons and equals - line 3842: // Is it specially known. TODO should we remove some of these? - line 3981: // TODO remove and depend on framework for these instead. - line 4033: // TODO is this is at best heuristic. - line 4041: //TODO do we care about things in the GAC? it expands the search quite a bit. src/TraceEvent/TraceEvent.cs (16 lines): - line 454: // TODO this does not work for very long traces. - line 1053: if (payloadNames[index] == "objectId") // TODO this is a hack. - line 1252: // TODO overflow - line 1567: return offset + 4; // TODO confirm - line 1624: // TODO review. - line 1651: // TODO review. - line 2103: // TODO: currently most uses the source aligned so - line 2372: /* The top 16 bits are reserved for system use (TODO define them) */ - line 2453: // TODO should have an UnRegisterParser(TraceEventParser parser) API. - line 2461: // TODO Add an unregister API. - line 2798: // TODO FIX NOW currently we have a hack where we know we are not correct - line 2983: // TODO sort template by provider so we can optimize. - line 3039: // TODO support WPP. - line 3550: currentID = currentID + 1; // TODO overflow. - line 3596: currentID = currentID + 1; // TODO overflow. - line 4379: /// TODO this is probably not worht the complexity... src/EtwClrProfiler/CorProfilerTracer.cpp (15 lines): - line 108: // TODO presently unused. Only needed if the callback needs the TracerState - line 213: CallSamplingRate = 997; // TODO make it configurable. We choose 997 because it is prime and thus likely to be uncorrelated with things. - line 235: #if 0 // TODO FIX NOW, implement filtering. - line 388: // TODO FIX NOW add support or ICorProfilerCallback4 (for large objects) - line 506: // TODO this is probably inefficient, should only call back on classes that are variable sized - line 513: if (classInfo == 0) // TODO FIX NOW, we should log something. - line 525: // TODO FIX NOW HACK for exchange data collection - line 569: // TODO This is for debugging. Can remove after we are happy with the algorithm. - line 597: #if 0 // TODO FIX NOW implement - line 622: // TODO FIX NOW HACK for exchange data collection - line 682: /** TODO FIX NOW - line 701: // TODO FIX NOW HACK for exchange data collection - line 715: // TODO FIX NOW HACK for exchange data collection - line 733: DWORD classFlags = 0; // TODO FIX NOW, set class flags properly. - line 797: // TODO FIX NOW remove after experimentation (actually make it so that it is configurable). src/TraceEvent/Stacks/CallTree.cs (15 lines): - line 346: // TODO see can be more concurrent than this. - line 465: // TODO FIX NOW - line 849: // because it confuses the upper level logic TODO: this is kind of a hack. - line 997: // TODO FIX NOW should this be a separate sub-type? - line 1244: // TODO FIX NOW. This is a hack, we know every type of CallTreeNode. - line 1262: // TODO FIX NOW too subtle! This tracing back up the stack is tricky. - line 1280: // so we can simply cast. TODO FIX NOW decide how to not break the abstraction. - line 1292: if (childNode != null) // TODO FIX NOW: I would not think this check would be needed. - line 1308: // TODO FIX NOW, these are arc counts, they should be node counts. (need interning). - line 1369: // TODO the samples are no longer in time order, do we care? - line 1408: // TODO FIX NOW: decide what to do here, we originally did a recursive IsFolable but that causes very little folding. - line 1456: // TODO see if taking the lock in the read case is expensive or not. - line 1557: if (Name == "BROKEN") // TODO use ID instead - line 1657: byID = null; // TODO right now we might get duplicates that have the same name but different ID. Give up. - line 2091: // TODO breaking abstraction. src/PerfView/Extensibility.cs (15 lines): - line 88: #if false // TODO FIX NOW remove - line 114: // TODO FIX NOW better name. - line 208: // TODO FIX NOW Major hacks. - line 283: // TODO FIX NOW this is probably a hack? - line 798: // TODO get rid of ugly 4 column restriction - line 876: // TODO FIX NOW is this a hack? - line 1004: // TODO remember the status log even when we don't have a gui. - line 1094: // TODO logic for getting out of ConfigSettings. - line 1158: /// TODO should not have to specify the ETL file. - line 1210: internal string m_fileName; // TODO is this a hack. This is the file name if present. - line 1525: // TODO we actually end up with too large of dictionary because we also store the private methods too. - line 1590: // TODO add logging that gets to the user. - line 1729: // TODO we don't get the stack for the inner exception. - line 1747: // TODO FIX NOW use or remove - line 2152: // TODO does not really belong here, it is generic code. src/MemoryGraph/graph.cs (15 lines): - line 82: /// TODO FIX NOW used this instead of the weird if node index grows technique. - line 162: /// TODO I can eliminate the need for AllowReading. - line 210: /// have a nodeId, Size and children. (TODO: should Size be here?) - line 266: /// TODO: Currently this is only correct for the 32 bit version. - line 331: // TODO move these to GraphUtils. - line 532: // TODO this is inefficient. Also think about very large files. - line 595: // TODO be lazy about reading in the blobs. - line 982: if (moduleName.Length == 0) // TODO should we have this convention? - line 995: /// TODO keep track if the nodeId is of variable Size - line 1846: // TODO We give up if the chains are larger than 10K long (because we stack overflow otherwise) - line 1912: /// TODO FIX NOW cloned code (also in FilterStackSource) - line 2001: /// TODO FIX NOW put in its own file. - line 2181: // And initialize the mapping from old nodes to new nodes. (TODO: this can be a hash table to save size? ) - line 2618: // TODO FIX NOW enable Debug.Assert(totalSize == m_graph.TotalSize); - line 2619: Debug.Assert(Math.Abs(totalSize - m_graph.TotalSize) / totalSize < .01); // TODO FIX NOW lame, replace with assert above src/related/EventRegister/Library/Util/CommandLine.cs (14 lines): - line 292: // TODO response files. - line 309: // TODO review this. IT is too subtle. - line 358: // TODO we do paging, but this is not what we want when it is redirected. - line 498: // TODO assert that aliases are defined before the Definition. - line 499: // TODO confirm no ambiguities (same alias used again). - line 523: // TODO decide if we should keep this... - line 669: // TODO allow substrings or other patterns. - line 814: if (defValue.Length < 40) // TODO is this reasonable? - line 926: // TODO review this carefully. - line 1150: // by excluding it here. TODO: this makes negative numbers harder... - line 1236: // TODO review invarient here. - line 1343: // TODO I need some way of handling string with , in them. - line 1397: // TODO alias information. - line 1470: // TODO expose the ability to change this? src/TraceEvent/Stacks/FilterStacks.cs (13 lines): - line 169: /// TODO Document - line 463: // TODO is this good enough? - line 536: // Try to reuse the slot. Give up an allocate if necessary (TODO we can recycle if it happens frequently) - line 611: // TODO confirm this works right when parentStackInfo == null - line 624: // This is reasonably expensive, so we only do it for MoveNext operations. TODO make this efficient all the time. - line 663: // TODO we are doing a lot of string manipulation. Can we avoid this? - line 811: public bool IsModuleEntry; // TODO IsModuleEntry is an experimental thing. Remove after gathering data. - line 867: var pat = new Regex(ToDotNetRegEx(patStr), RegexOptions.IgnoreCase); // TODO perf bad if you compile! - line 870: // TODO IsModuleEntry is an experiemental thing. Remove after gathering data. - line 897: // TODO IsModuleEntry is an experiemental thing. Remove after gathering data. - line 977: ret[i] = new Regex(ToDotNetRegEx(patStr), RegexOptions.IgnoreCase); // TODO perf bad if you compile! - line 1091: public bool IsMoveNext; // As a special case MoveNext we ensure 'perfect' recursion removal (TODO: make this work for any method) - line 1244: /// TODO make dynamic. src/PerfView/Utilities/commandLine.cs (13 lines): - line 294: // TODO response files. - line 381: // TODO assert that aliases are defined before the Definition. - line 382: // TODO confirm no ambiguities (same alias used again). - line 553: // TODO decide if we should keep this..., or maybe it should be true by default. - line 573: // TODO remove? Not clear it is useful. Can be useful for CMD.EXE alias (which provide a default) but later user may override. - line 627: // TODO we should null out data structures we no longer need, to save space. - line 813: // TODO review this carefully. - line 1147: // by excluding it here. TODO: this makes negative numbers harder... - line 1455: // TODO I need some way of handling string with , in them. - line 1710: if (defValue.Length < 40) // TODO is this reasonable? - line 1830: // TODO we do paging, but this is not what we want when it is redirected. - line 1873: // TODO alias information. - line 1956: // TODO expose the ability to change this? src/TraceEvent/Computers/ThreadTimeComputer.cs (13 lines): - line 23: // TODO FIX NOW NOT DONE - line 326: // TODO decide what the correct heuristic is. - line 399: // TODO do we care that we left CPU samples abandoned? Probably not.... - line 783: ret = m_outputStackSource.GetCallStack(data.CallStackIndex(), top, null); // TODO use the cache... - line 895: // TODO review this - line 898: if (0 < delta && delta < 5) // TODO hack, give up after 5 msec - line 918: // TODO use an array instead of a dictionary. - line 939: // TODO FIX NOW this does not handle the case where the thread was ready from the start (preempted). - line 987: // TODO FILL IN - line 1066: private int DiskIOSize; // TODO FIX NOW use or remove - line 1106: // TODO Kind of a hack. - line 1215: // TODO FIX NOW put this somewhere better. - line 1357: // TODO FIX NOW use or remove src/TraceEvent/DynamicTraceEventParser.cs (12 lines): - line 97: // TODO we are 'leaking' these today. Clean them up on Dispose. - line 562: // TODO FIX NOW the || condition is a hack because PerfVIew.ClrEnableParameters fails. - line 612: // TODO this is very inefficient for blitable types. Optimize that. - line 1044: // TODO is this error handling OK? - line 1216: // TODO cache this when you parse the value so that you don't need to do it twice. Right now it is pretty inefficient. - line 1319: throw new Exception("Unsupported type " + type.Name); // TODO - line 1491: // TODO come up with a real encoding for variable sized things - line 2149: // TODO I currently require opcodes,and tasks BEFORE events BEFORE templates. - line 2174: // Strip off any namespace prefix. TODO is this a good idea? - line 2228: // TODO use message for opcode if it is available so it is localized. - line 2360: // TODO currently we just ignore messages without a valid string name. Is that OK? - line 2380: // TODO FIX NOW, log this! src/HeapDump/Utilities/commandLine.cs (12 lines): - line 288: // TODO response files. - line 371: // TODO assert that aliases are defined before the Definition. - line 372: // TODO confirm no ambiguities (same alias used again). - line 493: // TODO decide if we should keep this... - line 607: // TODO we should null out data structures we no longer need, to save space. - line 786: // TODO review this carefully. - line 1120: // by excluding it here. TODO: this makes negative numbers harder... - line 1428: // TODO I need some way of handling string with , in them. - line 1674: if (defValue.Length < 40) // TODO is this reasonable? - line 1787: // TODO we do paging, but this is not what we want when it is redirected. - line 1830: // TODO alias information. - line 1913: // TODO expose the ability to change this? src/EtwHeapDump/DotNetHeapDumpGraphReader.cs (11 lines): - line 125: // TODO should not be needed if we use CAPTURE_STATE when collecting. - line 166: // TODO this does not work in the circular case - line 194: // TODO FIX NOW if (data.ClientSequenceNumber == 0) - line 259: // TODO we have to continue processing to get the module rundown events. - line 439: // TODO fix this so that they you see this as an arc from source to target. - line 575: // TODO FIX NOW these are kind of hacks - line 611: // TODO Debug.Assert(ccwInfo.IUnknown != 0); - line 614: // TODO currently there are times when a CCWs IUnknown pointer is not set (it is set lazily). - line 690: // TODO FIX NOW REMOVE - line 704: // TODO we can use the nodes type to see if this is an RCW before doing this lookup which may be a bit more efficient. - line 851: // TODO FIX NOW worry about module collision src/PerfView/EventViewer/EventWindow.xaml.cs (11 lines): - line 100: // TODO Ugly, morph two cells on different rows into one line for the correct cut/paste experience - line 271: // TODO painfully slow, fragile, trickly - line 385: // TODO this could be confusing as we have filtered out everything before a range and can't get it back. - line 429: // TODO FIX NOW: this should call a routine that does the opening of the stack view - line 465: // TODO FIX NOW, make this so that it uses the stacks in the view. - line 1080: m_findPat = new Regex(pat, RegexOptions.IgnoreCase); // TODO perf bad if you compile! - line 1359: // TODO should not have to be linear - line 1402: // TODO use the alignment attribute - line 1511: // TODO FIX NOW is this a hack? - line 1625: // TODO: we really need to combine PerfDataGrid and EventViewer so that all this ugly logic is in one place. - line 1703: // TODO we currently have a problem where we make the GUI unresponsive because we flood it with BeginInvoke request here. src/TraceEvent/Computers/StartStopActivityComputer.cs (11 lines): - line 21: // TODO this leaks if stops are missing. - line 91: // TODO HACK. We have seen IIS Start and stop events that only have a - line 102: // TODO HACK. We have seen IIS Start and stop events that only have a - line 152: // TODO decide what the correct heuristic for deciding what start-stop events are interesting. - line 165: // TODO remove (including threadToLastAspNetGuid) after 9/2016 - line 491: // TODO FIX NOW, I have never run these! Get some data to test against. - line 641: // TODO decide if we need this... - line 962: // TODO GetResponseStream Stops can sometime occur before the start (if they can be accomplished without I/O). - line 1031: // TODO as of 2/2015 there was a bug where the ActivityPath logic was getting this ID wrong, so we get to from the thread. - line 1164: // TODO: [BinDu] AppInsights SDK has an issue that can create unexpected nested activity for Operation task. - line 1209: // TODO as of 2/2015 there was a bug where the ActivityPath logic was getting this ID wrong, so we get to from the thread. src/TraceEvent/Symbols/SymbolReader.cs (11 lines): - line 46: // TODO FIX NOW. the code below does not support probing a file extension directory. - line 224: // TODO can do all of these concurrently now. - line 254: // TODO can stall if the path is a remote path. - line 641: m_log.WriteLine("Updating NGEN createPdb output file to {0}", outputPdbPath); // TODO FIX NOW REMOVE (for debugging) - line 644: // TODO: Hack. V4.6.1 has both these characteristics, which leads to the issue - line 663: // TODO FIX NOW: there is a and ugly problem with persistence of suboptimal PDB files - line 666: // TODO we need to figure out a convention show we know that we have fallen back to no-lines - line 670: // TODO FIX NOW REMOVE after V4.5 is out a while - line 730: /// TODO can be removed when we properly publish the NGEN pdbs as part of build. - line 888: // TODO remove after 12/2015 - line 1702: // TODO this is not right for corner cases (e.g. file paths with " or , } in them) src/TraceParserGen/Library/Util/CommandLine.cs (11 lines): - line 292: // TODO response files. - line 354: // TODO we do paging, but this is not what we want when it is redirected. - line 513: // TODO assert that aliases are defined before the Definition. - line 514: // TODO confirm no ambiguities (same alias used again). - line 546: // TODO decide if we should keep this... - line 885: if (defValue.Length < 40) // TODO is this reasonable? - line 1024: // TODO review this carefully. - line 1277: // by excluding it here. TODO: this makes negative numbers harder... - line 1537: // TODO I need some way of handling string with , in them. - line 1615: // TODO alias information. - line 1699: // TODO expose the ability to change this? src/PerfView/ObjectViewer/TreeViewGrid.xaml.cs (11 lines): - line 80: // TODO Ugly, morph two cells on different rows into one line for the correct cut/paste experience - line 102: // TODO FIX NOW use re remove. - line 178: // TODO This stuff feels like a hack. At some point review. - line 194: // TODO should not have to be linear - line 267: // TODO the +1 is a bit of a hack. In treeviews we seem to loose a space - line 300: // TODO I would like get the columnHeader text not from the column name but from what is displayed in the hyperlink - line 319: // TODO this is a bit of a hack. remove the context menu from the textBox so that you get - line 333: // TODO FIX NOW. This is an ugly hack. - line 369: // TODO this is all a hack. - line 473: #if false // TODO FIX NOW use or remove - line 547: // TODO avoid search src/TraceEvent/TraceEventSession.cs (11 lines): - line 63: EnableProviderTimeoutMSec = 0; // Currently by default it is async (TODO change to 10000? by default) - line 90: EnableProviderTimeoutMSec = 0; // Currently by default it is async (TODO change to 10000? by default) - line 159: // TODO avoid the throw/catch when not present as it is inefficient. - line 894: // TODO need safe handles - line 1028: // TODO FIX NOW support TraceEventProviderOptions. - line 1320: // TODO determine what properties->RealTimeBuffersLost is (in my experiments it was always 0) - line 1631: // TODO FIX NOW. there are races associated with this. - line 2030: // TODO allow stacks only on open and close; - line 2130: // TODO What are these? - line 2345: // TODO: we track the enabled providers but it is better to get it from the - line 2874: return ret; // TODO FIX NOW Do I want to simply return nothing or give a more explicit error? src/FastSerialization/StreamReaderWriter.cs (10 lines): - line 119: return unchecked(((long)high << 32) + low); // TODO find the most efficient way of doing this. - line 150: // TODO test this for correctness - line 157: // TODO test this for correctness - line 231: // TODO is unsafe code worth it? - line 395: // TODO confirm that this is correct! - line 401: // TODO confirm that this is correct! - line 490: // TODO - line 564: // TODO confirm that this is correct! - line 570: // TODO confirm that this is correct! - line 591: // TODO really big streams will overflow; src/PerfView/UserCommands.cs (10 lines): - line 73: #if false // TODO Ideally you don't need Linux Specific versions, and it should be based - line 417: // TODO FIX NOW retrieve the process name, ID etc. - line 435: // TODO FIX NOW retrieve the process name, ID etc. - line 544: // TODO can show edges. - line 991: // TODO can remove after pdbScope gets a proper outputFileName parameter - line 999: // TODO This is pretty ugly. If the main window is working we can't launch it. - line 1081: // TODO COMPLETE - line 1097: // TODO read in a chunk if it is out of order fail, when complete close the file. - line 1348: // TODO support eventSources - line 1782: // TODO FIX NOW decide where to put these. src/TraceEvent/Computers/ActivityComputer.cs (10 lines): - line 64: // TODO we are protecting ourselves against a task being scheduled twice (we ignore the second one). - line 444: // TODO: ideally we just call OnCreated, and OnStarted. - line 708: // TODO FIX NOW think about the timers case. - line 950: // TODO FIX NOW add appDomain ID - line 963: return (((Address)highBits) << 32) + nativeOverlapped; // TODO this is NOT absolutely guaranteed not to collide. - line 969: return (((Address)highBits) << 32) + workId; // TODO this is NOT absolutely guaranteed not to collide. - line 1113: // TODO FIX NOW fix if you don't have symbols - line 1240: // TODO FIX NOW fix if you don't have symbols - line 1337: // TODO: Looking for better ways to inform the users when this happens. - line 1383: // TODO FIX NOW use or remove. src/TraceParserGen/TraceParserGen.cs (10 lines): - line 47: // TODO should we rename or simply leave it? Not clear yet... For now we rename - line 169: output.WriteLine(" //TODO: Fill in"); - line 307: // TODO: define the xxxTaskGuid based on eventGUID attribute of elements of the .man file - line 425: // TODO: Multiple version support not available yet for struct fields - line 438: // TODO: Arrays contained inside structs not supported - line 445: // TODO: Fixed-sized arrays of structs not yet supported - line 1064: // TODO do we want to support unsigned? - line 1096: // TODO add a fixed size string parser routine. - line 1110: // TODO deal with this. - line 1288: // TODO: I don't think this works on x64 for arrays of pointers src/TraceParserGen/Program.cs (9 lines): - line 119: break; // TODO FIX NOW allow multiple providers in a manifest. - line 371: // TODO Debug.Assert(task.id == 0); - line 387: // TODO Debug.Assert(template.id == 0); - line 440: // TODO opcode wrong. - line 522: // TODO remove and depend on framework for these instead. - line 564: // TODO load it its own appdomain so we can unload them properly. - line 581: // Convert to an application exception TODO is this a good idea? - line 660: // TODO is this is at best heuristic. - line 668: //TODO do we care about things in the GAC? it expands the search quite a bit. src/TraceEvent/Parsers/ClrTraceEventParser.cs (9 lines): - line 151: /// TODO document - line 2338: // TODO remove if project N's Guids are harmonized with the desktop - line 2348: // TODO FIX NOW also have to unregister the project N templates. - line 3384: // TODO warn the user... - line 3887: // TODO display the type parameters IDs - line 7062: // TODO you can remove the length test after 2104. It was an old internal case - line 7359: /// TODO FIX NOW Can rip out and make a constant 44 after 6/2014 - line 12655: // TODO FIX NOW, need to add ContainsPointer - line 12886: /// TODO document src/PerfView/SupportFiles/UsersGuide.htm (9 lines): - line 704: - line 2722: TODO NOT DONE - line 2725:
  • TODO NOT DONE
  • - line 2726:
  • TODO NOT DONE
  • - line 2745:

    TODO NOT DONE

    - line 3275: - line 3354: - line 3865: - line 6872: src/PerfView/StackViewer/PerfDataGrid.xaml.cs (9 lines): - line 65: // TODO Ugly, morph two cells on different rows into one line for the correct cut/paste experience - line 116: m_findPat = new Regex(pat, RegexOptions.IgnoreCase); // TODO perf bad if you compile! - line 171: // TODO This stuff feels like a hack. At some point review. - line 187: // TODO should not have to be linear - line 298: // TODO the +1 is a bit of a hack. In treeviews we seem to loose a space - line 352: // TODO I would like get the columnHeader text not from the column name but from what is displayed in the hyperlink - line 375: // TODO this is a bit of a hack. remove the context menu from the textBox so that you get - line 419: // TODO FIX NOW. This is an ugly hack. - line 455: // TODO this is all a hack. src/PerfView/memory/ClrProfilerParser.cs (8 lines): - line 180: // TODO confirm the statement above is true. - line 222: // TODO should we show the whole stack? - line 330: // TODO decide how to fix this. - line 350: if (methodIds[(int)stackIds[(int)stackId].methodId] != null) // TODO - line 362: if (methodIds[(int)stackIds[(int)stackId].methodId] != null) // TODO - line 904: // TODO FIX NOW, decide what to do about normalizing type names - line 917: // TODO this could be more efficient. - line 1090: // TODO Debug.Assert(fileStackId <= 1 || methodIds[(int)stackIds[(int)ret].methodId].name != null); src/PerfView/Dialogs/MemoryDataDialog.xaml.cs (8 lines): - line 30: // TODO FIX NOW when clrProfilerFormat is selected Freeze must be. - line 142: m_args.DumpData = false; // TODO FIX NOW actually use - line 191: // TODO FIX NOW - line 196: // TODO FIX NOW - line 201: // TODO FIX NOW - line 206: // TODO FIX NOW dump state to CommandLineArgs - line 228: // TODO this is lame no feedback on errors. - line 290: // TODO FIX NOW maek the call to GetProcessesWithGCHeaps async. src/TraceEvent/Symbols/NativeSymbolModule.cs (8 lines): - line 87: // TODO determine why this happens! - line 96: // TODO FIX NOW, should not need to do this hand-unmangling. - line 99: // TODO relatively inefficient. - line 117: #if false // TODO FIX NOW remove - line 334: // TODO FIX NOW, this code here is for debugging only turn if off when we are happy. - line 345: //} // End TODO FIX NOW debugging code - line 470: /// TODO We don't need this subclass. We can have SourceFile simply a container - line 1655: // TODO FIX NOW use or remove src/TraceEvent/TraceEventNativeMethods.cs (7 lines): - line 16: // TODO use SafeHandles. - line 64: // TODO USE or remove. See http://msdn.microsoft.com/en-us/library/windows/desktop/aa363689(v=vs.85).aspx - line 693: // TODO what is this for? - line 718: GC.KeepAlive(process); // TODO get on SafeHandles. - line 734: // TODO FIX NOW make these private - line 754: GC.KeepAlive(process); // TODO get on SafeHandles. - line 761: // TODO why do we need this? src/FastSerialization/FastSerialization.cs (7 lines): - line 716: /// TODO Need a DEBUG mode where we detect if others besides the owner reference the object. - line 1093: /// TODO remove? we have not tested this with AllowLazyDeserialzation==false. - line 1949: // TODO in the case where the object already exist, we just created an object just to throw it - line 2022: // TODO this is a hack. The .NET Core Runtime < V2.1 do not emit an EndObject tag - line 2091: // TODO would like some redundancy, so that failure happen close to the cause. - line 2179: /// TODO more - line 2310: // TODO fix the versioning so you don't have to create an instance of the type on serialization. src/TraceEvent/ETWTraceEventSource.cs (7 lines): - line 159: /// TODO: what does this do for Real time sessions? - line 219: /// TODO: we can achieve perfect synchronization by exposing the QPC tick sync point so we could read the sync point - line 283: // TODO can rip this out when we don't package ready-to-run images - line 540: // TODO do we even need log pointer size anymore? - line 778: // TODO not really a EVENT_RECORD on input, but it is a pain to be type-correct. - line 786: // TODO Figure out if there is a marker that is used in the WOW for the classic providers - line 957: // TODO this can be removed, and use AddDispatchHook instead. src/PerfView/Dialogs/RunCommandDialog.xaml.cs (7 lines): - line 15: // TODO use or delete - line 133: // TODO give better feedback about what happens when conflicts happen. - line 307: // TODO the defaults are wrong if you switch from run to collect and back - line 356: m_collectionRunning = true; // TODO this is hack - line 461: // Handled by the action itself. TODO is this a hack? - line 765: // TODO this logic is cloned. We need it in only one place. - line 934: // TODO I am trying to make the expander just grow the window, I do this by forcing the window height src/TraceEvent/Parsers/ClrPrivateTraceEventParser.cs (6 lines): - line 8: // TODO FIX NOW harmonize these two and then refer to one from the other. - line 35: // TODO FIX NOW: Project N and the Desktop should not have two GUIDs - line 1460: // TODO FIX NOW, remove after private builds are gone. - line 2062: // TODO remove if project N's Guids are harmonized with the desktop - line 2072: // TODO FIX NOW also have to unregister the project N templates. - line 2724: // TODO FIX NOW gives 19 on win8 Debug.Assert(!(Version == 0 && EventDataLength != 22)); src/HeapDump/GCHeapDump.cs (6 lines): - line 32: /// TODO can't set the rest of the meta-data associated with the graph this way. - line 51: /// TODO FIX NOW REMOVE DO NOT USE Use MemoryGraph.Is64Bit instead. - line 234: // TODO FIX NOW, need to work for PerfView64 - line 892: // TODO this is not complete. See the ToStream for more. Does not include interop etc. - line 1015: // TODO FIX NOW very inefficient. Use ReadValueChunk and FastStream to make more efficient. - line 1031: // TODO should probably just reserve node index 0 to be an undefined object? src/FastSerialization/CompressedStream.cs (6 lines): - line 190: // TODO remove outputStream.Write(new byte[compressedBlockSize], 0, compressedBlockSize); - line 540: m_maxWorkers = 1; // TODO - line 562: long compressedBlockPosition = 0; // TODO FIX NOW - line 582: return 0; // TODO throw exception instead? - line 614: block.m_refCount++; // TODO deal with overflow. - line 917: // TODO more sizes? src/TraceEvent/RegisteredTraceEventParser.cs (6 lines): - line 150: // TODO FIX NOW deal with too small of a buffer. - line 294: // TODO handle cases outside standard levels - line 535: // TODO FIX NOW beef this up. - line 548: // TODO FIX NOW what should we be doing here? I do want pass along channel information - line 629: // TODO cache the buffer?, handle more types, handle structs... - line 796: int buffSize = 84000; // TODO this is inefficient (and incorrect for very large enums). src/PerfView/App.cs (6 lines): - line 456: // You don't need amd64 on ARM (TODO remove it on X86 machines too). - line 539: /// TODO this can be removed when we don't update PerfView commonly and are willing - line 544: // TODO FIX NOW. should I use 'args' rather than CommandLine - line 716: // TODO FIX NOW we will end up with both internal and external symbol servers on the symbol path. - line 1027: // TODO this is a bit of a hack. I really want the 'current' StackWindow - line 1100: // TODO AttachConsole is not reliable (GetStdHandle returns an invalid handle about half the time) src/TraceEvent/Stacks/Stacks.cs (5 lines): - line 550: // TODO assert that the samples are associated with this source. - line 754: // TODO this should be added to the stack source interface and overriden here - line 784: // TODO does this belong in the interner? - line 1007: // TODO should we be doing this here? This feels like a presentation transformation - line 1106: // TODO we could make this smaller if we care since BaseFrame and ModuleIndex are never used together. src/PerfView/memory/MemoryGraphStackSource.cs (5 lines): - line 83: #if false // TODO FIX NOW REMOVE - line 361: // TODO FIX NOW remove priority - line 363: // TODO FIX NOW hack for CLRProfiler comparison - line 403: // TODO we simply give up for now. This is OK because we only use GetRefs in places were we are AUGMENTING - line 636: // TODO generalize this, it is also pretty expensive... src/TraceParserGen/Library/Util/Command.cs (5 lines): - line 128: // TODO add a capability to return a enumerator of output lines. (and/or maybe a delegate callback) - line 238: // TODO implement - line 466: // TODO why only for output streams? - line 525: // TODO : HACK we see to have a race in the async process stuff - line 615: // TODO (should we use WMI instead?) src/CSVReader/EventSource.cs (5 lines): - line 152: // TODO FIX NOW should be abstract, get CSV and ETW subclasses to implement - line 157: // TODO FIX NOW should be abstract, get CSV and ETW subclasses to implement - line 167: // TODO FIX NOW should not be virtual. - line 182: // TODO FIX NOW NOT DONE - line 196: // TODO FIX NOW NOT DONE src/PerfView/memory/MemoryStats.cs (5 lines): - line 47: // TODO FIX NOW worry about error codes. - line 100: region.PrivateWorkingSet += 4; // TODO FIX NOW - line 112: /** TODO REMOVE - line 345: // TODO FIX NOW this can be in kernel32 too - line 359: // TODO FIX NOW use or remove src/TraceEvent/Utilities/command.cs (5 lines): - line 189: // TODO add a capability to return a enumerator of output lines. (and/or maybe a delegate callback) - line 285: // TODO implement - line 545: // TODO why only for output streams? - line 609: // TODO : HACK we see to have a race in the async process stuff - line 707: // TODO (should we use WMI instead?) src/PerfView/StackViewer/CallTreeView.cs (5 lines): - line 94: m_findPat = new Regex(pat, RegexOptions.IgnoreCase); // TODO perf bad if you compile! - line 317: // TODO avoid search - line 490: // TODO FIX NOW, put this in the XAML instead - line 518: // TODO FIX NOW use or remove - line 572: set { } // TODO See if there is a better way of getting the GUI working. src/PerfView/memory/PdbScopeMemoryGraph.cs (5 lines): - line 367: // TODO inefficient - line 436: // TODO HACK, viewer treats { } specially (removes them) figure out where/why... - line 525: // TODO FIX NOW remove ASAP (10/14) THIS IS A HACK imports with large sizes are wrong, fix PdbScope and remove - line 569: private Dictionary m_moduleMap; // TODO FIX NOW not needed after PdbScope is fixed. - line 644: lineData.Size = 16; // TODO Better estimate. src/PerfView/memory/GCHeapSimulator.cs (4 lines): - line 180: // TODO do we need module info? - line 443: // TODO add module name to type name - line 518: // TODO FIX NOW make sure the COR_ELEMENT_TYPES are covered. - line 640: // TODO: in the sampling case, when you miss we only increment by the pointer size, which is pretty inefficient. src/PerfView/EtwEventSource.cs (4 lines): - line 76: // TODO could be more efficient about process filtering by getting all the processes that match. - line 428: //TODO Currently, people may have recursive tasks that are not marked (because they can't if they want it to work before V4.6) - line 434: // TODO this is causing unnecessary collisions. - line 882: // TODO FIX NOW Implement. src/PerfView/memory/ClrProfilerSources.cs (4 lines): - line 32: // TODO this is for debugging can remove - line 93: return System.Enum.GetName(typeof(StackSourceFrameIndex), frameIndex); // TODO can be more efficient - line 271: // TODO expose the thread information - line 419: // TODO FIX NOW, not right when we have segments everywhere.. src/PerfView/Triggers.cs (4 lines): - line 99: if (categoryName.StartsWith(".NET")) // TODO FIX NOW, remove this condition after we are confident of it. - line 249: #if PERFVIEW // TODO FIX NOW turn this on and test. - line 508: ret.StartStopID = "1"; // TODO FIX NOW: Don't know what the first arg is. - line 1608: // TODO FIX NOW USE THE ONE IN TraceEvent src/PerfView/CommandLineArgs.cs (4 lines): - line 260: parser.DefineOptionalQualifier("BufferSize", ref BufferSizeMB, "The size the buffers (in MB) the OS should use to store events waiting to be written to disk."); // TODO remove eventually. - line 261: parser.DefineOptionalQualifier("Circular", ref CircularMB, "Do Circular logging with a file size in MB. Zero means non-circular."); // TODO remove eventually. - line 464: // TODO this logic is cloned. We need it in only one place. If you update it do the other location as well - line 638: // TODO FIX NOW parser.DefineOptionalQualifier("DumpData", ref DumpData, "Dump the data as well as the connectivity information."); src/related/EventRegister/Library/Util/Command.cs (4 lines): - line 129: // TODO add a capability to return a enumerator of output lines. (and/or maybe a delegate callback) - line 250: // TODO implement - line 463: // TODO why only for output streams? - line 619: // TODO (should we use WMI instead?) src/TraceEvent/TraceEventStacks.cs (4 lines): - line 169: // TODO use callback model rather than enumerator - line 658: // We allow things that end in ntdll to be considered unbroken (TODO is this too strong?) - line 800: /// TODO data should be removed (or callstack derived from it) - line 941: return StackSourceModuleIndex.Invalid; // TODO FIX NOW this is a poor approximation src/FastSerialization/SegmentedMemoryStreamReader.cs (3 lines): - line 99: return (long)((((ulong)high) << 32) + low); // TODO find the most efficient way of doing this. - line 130: // TODO test this for correctness - line 137: // TODO test this for correctness src/TraceEvent/Parsers/Microsoft-Windows-NDIS-PacketCapture.cs (3 lines): - line 67: // TODO FIX NOW HACK - line 72: // TODO FIX NOW HACK - line 152: // TODO FIX NOW This is probably a hack src/PerfView/ObjectViewer/ObjectViewer.xaml.cs (3 lines): - line 54: // TODO FIX NOW define ObjectViewerQuickStart ObjectViewerTips in the help, ValueColumn NameColumn. - line 65: #if false // TODO FIX NOW - line 233: // TODO FIX NOW src/TraceEvent/TraceUtilities/PEFile.cs (3 lines): - line 223: // TODO make public? - line 1057: // TODO incomplete, but this is all I need. - line 1074: // TODO hack, search for FileVersion string ... src/PerfView/OtherSources/WTStackSource.cs (3 lines): - line 38: /// FirstCallStackIndex is this 'original routine'. TODO: Not clear this is the right answer.... - line 53: // TODO this is relatively inefficient. - line 86: parent = stack[depth - 1].FirstCallStackIndex; // TODO handle out of range src/PerfView/memory/ClrProfilerMemoryGraph.cs (3 lines): - line 158: // TODO we can do better by looking at flags. - line 221: // TODO FIX NOW don't allocate every time - line 248: // TODO decide if this is worth it src/TraceEvent/EventPipe/EventPipeEventSource.cs (3 lines): - line 240: Debug.Assert(0 <= eventData.TotalNonHeaderSize && eventData.TotalNonHeaderSize < 0x20000); // TODO really should be 64K but BulkSurvivingObjectRanges needs fixing. - line 1120: // TODO the extra || operator is a hack because the runtime actually tries to emit events that - line 1129: // TODO remove once .NET Core has been fixed to not emit stacks on CLR method events which are just for bookkeeping. src/TraceEvent/Ctf/CtfTraceEventSource.cs (3 lines): - line 79: // TODO: Need to cleanly separate clocks, but in practice there's only the one clock. - line 590: // TODO: Set these properties based on Ctf context - line 617: // TODO: This is not IFastSerializable src/PerfView/HeapView/HeapAnalyzer.cs (3 lines): - line 365: // TODO don't use IDs but use individual callbacks. - line 482: // TODO don't use IDs but use individual callbacks. - line 803: // TODO because of the algorithm below, we can't handle very large blocks of memory src/TraceEvent/Parsers/JScriptTraceEventParser.cs (3 lines): - line 1659: #if false // TODO enable - line 1852: // TODO FIX NOW. We don't actually register any templates here because we know we are out of date (this file needs to be refreshed) - line 3387: // Debug.Assert(!(Version == 0 && EventDataLength != HostOffset(12, 1))); TODO FIX NOW disabled why wrong? src/HeapDump/Debugger/DumpDebugging/DumpReader.cs (3 lines): - line 1172: //TODO: real code here to get the relocations right without loading would be nice, but - line 1187: //TODO: Attempted file load order is NOT guaranteed, so the uncertainty will make output order non-deterministic. - line 2115: #if false // TODO FIX NOW src/TraceEvent/Ctf/CtfMetadataLegacyParser.cs (3 lines): - line 295: // TODO: Can enums just be an inline defined integer? - line 301: // TODO: Floating point - line 427: // TODO: Currently we read all of metadata and then parse it. We could do better by src/PerfView/memory/GCPinnedObjectAnalyzer.cs (3 lines): - line 371: // TODO: Handle objects that are pinned multiple times (?) - line 531: // TODO FIX NOW worry about duplicates between the public and private CLR providers. - line 565: // TODO: Complete member initialization src/PerfView/IProcess.cs (3 lines): - line 128: if (ret > 1000) // Trivial loop prevention. TODO do better. - line 201: // TODO use or delete - line 233: public double CPUTimeMSec { get { return 0; } } // TODO FIX NOW do better src/PerfView/StateMachineFramework/ServerRequestComputer.cs (3 lines): - line 243: // TODO This is for robustness, it should not exist, but if it does remove it. - line 476: // TODO REVIEW: This is moderately expensive. - line 554: #if false // TODO FIX NOW remove src/TraceEvent/Stacks/Histogram.cs (2 lines): - line 310: int valueBucket = (int)(metric / scale * 10); // TODO should we round? - line 342: // TODO we are not symetric, we use digits on the positive side but not negative. src/PerfView/StackViewer/StackWindow.xaml (2 lines): - line 433: - line 510: src/PerfView/memory/JavaScriptHeapDumper.cs (2 lines): - line 155: // !TODO captures state for all processes! This is not so bad because the others are probably - line 178: // TODO FIX NOW, time out faster if we seek to be stuck src/FastSerialization/SegmentedMemoryStreamWriter.cs (2 lines): - line 78: // TODO do actual UTF8 - line 96: // TODO really big streams will overflow; src/PerfView/GuiUtilities/StatusBar/StatusBar.xaml.cs (2 lines): - line 417: // TODO FIX NOW remove m_worker.Interrupt(); // kill any work in process; - line 472: /// TODO this really does not belong here. src/PerfView/GuiApp.cs (2 lines): - line 129: // TODO FIX NOW would really like to find the window with focus, and not always use the main window... - line 149: // TODO discriminate between the GUI and Non_GUI case. src/CSVReader/CsvReader.cs (2 lines): - line 316: #if false // TODO decide if we want to ignore the .NI.DLL and if so do it uniformly. - line 464: // If we have exceeded MaxRet, then mark that fact TODO inefficient as we parse all other fields too! src/PerfView/memory/HeapSnapshot.cs (2 lines): - line 94: // TODO FIX NOW. Find a way of determing which architecture a dump is - line 166: // TODO breaking abstraction to know about StackWindow. src/HeapDump/Debugger/DumpDebugging/MetadataLocator.cs (2 lines): - line 72: //TODO: implement symbol server lookups, other options. - line 73: //TODO: Check that the file found has the correct timestamp and size. src/TraceEvent/ZippedETL.cs (2 lines): - line 579: else if (archivePath == "PerfViewLogFile.txt" || archivePath == "LogFile.txt") // TODO we can remove the PerfViewLogFile.txt eventually (say in 2019) - line 588: // TODO do something with these? src/PerfView/StackViewer/PerfDataGrid.xaml (2 lines): - line 224: - line 277: src/TraceEvent/WPPTraceEventParser.cs (2 lines): - line 253: else if (typeStr.StartsWith("Enum(")) // TODO more support for enums - line 309: formatStr = formatStr.Replace("%0", ""); // TODO What is this? Why is it here? src/PerfView/memory/JavaScriptDumpGraph.cs (2 lines): - line 279: // TODO FIX NOW Currently I include the prototype link. is this a good idea? - line 286: // TODO FIX NOW: it seems that Value is truncated to 32 bits and we have to restore it. src/Utilities/DirectoryUtilities.cs (1 line): - line 142: // TODO trace message; src/PerfView/OtherSources/XMLStackSource.cs (1 line): - line 247: // TODO intern modules src/PerfViewExtensions/GlobalSrc/Commands.cs (1 line): - line 91: // TODO please remove these Demo commands and replace them with your own. They are here as templates. src/related/EventRegister/Library/Util/CommandLineUtilities.cs (1 line): - line 56: // TODO not quite right for strings with combinations of \ and "s src/TraceEvent/Computers/SampleProfilerThreadTimeComputer.cs (1 line): - line 198: // TODO decide what the correct heuristic is. src/HeapDump/Debugger/Debugger.cs (1 line): - line 365: // TODO FIX NOW for debugging. src/PerfView/memory/GenerationAwareMemoryGraph.cs (1 line): - line 57: // TODO: Is this size appropriate? src/TraceParserGen/Library/Util/DirectoryUtilities.cs (1 line): - line 156: // TODO trace message; src/TraceParserGen/Library/Util/FileUtilities.cs (1 line): - line 102: // TODO send to log instead of console src/PerfView/Dialogs/SelectProcess.xaml.cs (1 line): - line 159: // TODO When people sort the list, you 'jump around' if you do it this way. src/TraceEvent/Computers/TraceManagedProcess.cs (1 line): - line 150: /// TODO This implementation is poor at idenitfying the ParentPID, 64bitness, and Start/End times src/PerfView/Utilities/UsersGuide.cs (1 line): - line 45: // TODO I am leaking the file (but it is in the children directory) src/TraceParserGen/Library/Util/CommandLineUtilities.cs (1 line): - line 51: // TODO not quite right for strings with combinations of \ and "s src/HeapDump/Debugger/DumpDebugging/LibraryProvider.cs (1 line): - line 67: // TODO we could do a timestamp match too. src/EtwHeapDump/DotNetHeapDumper.cs (1 line): - line 191: // TODO FIX NOW, time out faster if we seek to be stuck src/TraceEvent/Ctf/CtfMetadataTypes.cs (1 line): - line 208: // TODO: We don't support reading floats. src/HeapDump/Debugger/ICorDebugWrappers.cs (1 line): - line 2094: // TODO: We may want to just return an IUnknown here, but then the fake-com wrappers will need some way of knowing how to wrap it src/HeapDump/Program.cs (1 line): - line 214: // TODO FIX NOW REMOVE GCHeap.DumpHeapFromProcessDump(inputSpec, outputFile, Console.Out); src/TraceParserGen/Library/Util/UsersGuide.cs (1 line): - line 30: // TODO I am leaking the file (but it is in the temp directory. src/EtwClrProfiler/ETWInterface.h (1 line): - line 8: #include // Something in here is needed for the headers in ETWClrProfiler.h TODO don't do such a blanked include. src/related/EventRegister/Program.cs (1 line): - line 398: // Convert to an application exception TODO is this a good idea? src/PerfView/StateMachineFramework/ComputingResourceStateMachine.cs (1 line): - line 441: // TODO: Fix (we'll need the last CPU stack as well). src/PerfView/ObjectViewer/ObjectViewer.xaml (1 line): - line 29: