ProfilerEntry.cs 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. #region Copyright notice and license
  2. // Copyright 2015 gRPC authors.
  3. //
  4. // Licensed under the Apache License, Version 2.0 (the "License");
  5. // you may not use this file except in compliance with the License.
  6. // You may obtain a copy of the License at
  7. //
  8. // http://www.apache.org/licenses/LICENSE-2.0
  9. //
  10. // Unless required by applicable law or agreed to in writing, software
  11. // distributed under the License is distributed on an "AS IS" BASIS,
  12. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. // See the License for the specific language governing permissions and
  14. // limitations under the License.
  15. #endregion
  16. using System;
  17. using System.IO;
  18. using System.Threading;
  19. using Grpc.Core.Internal;
  20. namespace Grpc.Core.Profiling
  21. {
  22. internal struct ProfilerEntry
  23. {
  24. public enum Type
  25. {
  26. BEGIN,
  27. END,
  28. MARK
  29. }
  30. public ProfilerEntry(Timespec timespec, Type type, string tag)
  31. {
  32. this.timespec = timespec;
  33. this.type = type;
  34. this.tag = tag;
  35. }
  36. public Timespec timespec;
  37. public Type type;
  38. public string tag;
  39. public override string ToString()
  40. {
  41. // mimic the output format used by C core.
  42. return string.Format(
  43. "{{\"t\": {0}.{1}, \"thd\":\"unknown\", \"type\": \"{2}\", \"tag\": \"{3}\", " +
  44. "\"file\": \"unknown\", \"line\": 0, \"imp\": 0}}",
  45. timespec.TimevalSeconds, timespec.TimevalNanos.ToString("D9"),
  46. GetTypeAbbreviation(type), tag);
  47. }
  48. internal static string GetTypeAbbreviation(Type type)
  49. {
  50. switch (type)
  51. {
  52. case Type.BEGIN:
  53. return "{";
  54. case Type.END:
  55. return "}";
  56. case Type.MARK:
  57. return ".";
  58. default:
  59. throw new ArgumentException("Unknown type");
  60. }
  61. }
  62. }
  63. }