• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* Copyright 2016 The TensorFlow Authors. All Rights Reserved.
2 
3 Licensed under the Apache License, Version 2.0 (the "License");
4 you may not use this file except in compliance with the License.
5 You may obtain a copy of the License at
6 
7     http://www.apache.org/licenses/LICENSE-2.0
8 
9 Unless required by applicable law or agreed to in writing, software
10 distributed under the License is distributed on an "AS IS" BASIS,
11 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 See the License for the specific language governing permissions and
13 limitations under the License.
14 ==============================================================================*/
15 
16 #ifndef TENSORFLOW_CORE_DEBUG_DEBUG_CALLBACK_REGISTRY_H_
17 #define TENSORFLOW_CORE_DEBUG_DEBUG_CALLBACK_REGISTRY_H_
18 
19 #include <functional>
20 #include <map>
21 #include <string>
22 #include <vector>
23 
24 #include "tensorflow/core/debug/debug_node_key.h"
25 #include "tensorflow/core/framework/tensor.h"
26 #include "tensorflow/core/platform/mutex.h"
27 
28 namespace tensorflow {
29 
30 // Supports exporting observed debug events to clients using registered
31 // callbacks.  Users can register a callback for each debug_url stored using
32 // DebugTensorWatch.  The callback key be equivalent to what follows
33 // "memcbk:///".
34 //
35 // All events generated for a watched node will be sent to the call back in the
36 // order that they are observed.
37 //
38 // This callback router should not be used in production or training steps.  It
39 // is optimized for deep inspection of graph state rather than performance.
40 class DebugCallbackRegistry {
41  public:
42   using EventCallback = std::function<void(const DebugNodeKey&, const Tensor&)>;
43 
44   // Provides singleton access to the in memory event store.
45   static DebugCallbackRegistry* singleton();
46 
47   // Returns the registered callback, or nullptr, for key.
48   EventCallback* GetCallback(const string& key);
49 
50   // Associates callback with key.  This must be called by clients observing
51   // nodes to be exported by this callback router before running a session.
52   void RegisterCallback(const string& key, EventCallback callback);
53 
54   // Removes the callback associated with key.
55   void UnregisterCallback(const string& key);
56 
57  private:
58   DebugCallbackRegistry();
59 
60   // Mutex to ensure that keyed events are never updated in parallel.
61   mutex mu_;
62 
63   // Maps debug_url keys to callbacks for routing observed tensors.
64   std::map<string, EventCallback> keyed_callback_ GUARDED_BY(mu_);
65 
66   static DebugCallbackRegistry* instance_;
67 };
68 
69 }  // namespace tensorflow
70 
71 #endif  // TENSORFLOW_CORE_DEBUG_DEBUG_CALLBACK_REGISTRY_H_
72