6b0202e79c8a9065e40e5ff9f23fb995516b06bd
[platform/upstream/dldt.git] / inference-engine / thirdparty / clDNN / src / gpu / ocl_user_event.h
1 /*
2 // Copyright (c) 2018 Intel Corporation
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 */
16
17 #pragma once
18
19 #include "ocl_base_event.h"
20 #include "api/CPP/profiling.hpp"
21 #include <memory>
22 #include <list>
23
24 #ifdef _WIN32
25 #pragma warning(push)
26 #pragma warning(disable : 4250)  // Visual Studio warns us about inheritance via dominance but it's done intentionally
27                                  // so turn it off
28 #endif
29
30 namespace cldnn {
31 namespace gpu {
32
33 struct user_event : public base_event, public cldnn::user_event {
34     explicit user_event(std::shared_ptr<gpu_toolkit> ctx) : base_event(ctx), cldnn::user_event(false) {}
35
36     void set_impl() override;
37     void attach_event(bool set) {
38         _event = cl::UserEvent(get_context()->context());
39         // we need to reset the timer(since attach_ocl_event is called only when this object is being reused)
40         _timer = cldnn::instrumentation::timer<>();
41         if (set) {
42             set_impl();
43             _set = set;
44         }
45     }
46     bool get_profiling_info_impl(std::list<cldnn_profiling_interval>& info) override;
47
48 protected:
49     cldnn::instrumentation::timer<> _timer;
50     std::unique_ptr<cldnn::instrumentation::profiling_period_basic> _duration;
51 };
52
53 #ifdef _WIN32
54 #pragma warning(pop)
55 #endif
56
57 }  // namespace gpu
58 }  // namespace cldnn