Hash :
d2f02c2a
Author :
Date :
2016-02-26T13:39:54
Fix a memory leak in the Query11 class. The destructor did not release D3D objects that could be in the mPendingQueries list when the destructor is called. This fix now iterates through the list and releases them. BUG=angleproject:1325 Change-Id: Ia3bd2a8a611f8dbf85051ab5bfea18ab72038af5 Reviewed-on: https://chromium-review.googlesource.com/329426 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Ian Ewell <ewell@google.com>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
//
// Copyright (c) 2013 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// Query11.h: Defines the rx::Query11 class which implements rx::QueryImpl.
#ifndef LIBANGLE_RENDERER_D3D_D3D11_QUERY11_H_
#define LIBANGLE_RENDERER_D3D_D3D11_QUERY11_H_
#include <deque>
#include "libANGLE/renderer/QueryImpl.h"
namespace rx
{
class Renderer11;
class Query11 : public QueryImpl
{
public:
Query11(Renderer11 *renderer, GLenum type);
~Query11() override;
gl::Error begin() override;
gl::Error end() override;
gl::Error queryCounter() override;
gl::Error getResult(GLint *params) override;
gl::Error getResult(GLuint *params) override;
gl::Error getResult(GLint64 *params) override;
gl::Error getResult(GLuint64 *params) override;
gl::Error isResultAvailable(bool *available) override;
gl::Error pause();
gl::Error resume();
private:
struct QueryState final : public angle::NonCopyable
{
QueryState();
~QueryState();
ID3D11Query *query;
ID3D11Query *beginTimestamp;
ID3D11Query *endTimestamp;
bool finished;
};
gl::Error flush(bool force);
gl::Error testQuery(QueryState *queryState);
template <typename T>
gl::Error getResultBase(T *params);
GLuint64 mResult;
GLuint64 mResultSum;
Renderer11 *mRenderer;
std::unique_ptr<QueryState> mActiveQuery;
std::deque<std::unique_ptr<QueryState>> mPendingQueries;
};
}
#endif // LIBANGLE_RENDERER_D3D_D3D11_QUERY11_H_