Skip to content

Commit 6b57e25

Browse files
author
Linas Beresna
committed
Make merge map a member variable
1 parent f0a8f9f commit 6b57e25

File tree

4 files changed

+12
-49
lines changed

4 files changed

+12
-49
lines changed

include/IECoreImage/DisplayDriverServer.h

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -99,12 +99,7 @@ class IECOREIMAGE_API DisplayDriverServer : public IECore::RunTimeTyped
9999
static void deregisterPortRange( const std::string &name );
100100
static const PortRange &registeredPortRange( const std::string &name );
101101

102-
// Get the number of merge drivers associated with
103-
// the current merge id.
104-
static const MergeDriverInfo &getMergeDriverInfo( int mergeId );
105-
106102
private:
107-
108103
// Session class
109104
// Takes care of one client connection.
110105
class Session;
@@ -116,6 +111,8 @@ class IECOREIMAGE_API DisplayDriverServer : public IECore::RunTimeTyped
116111
class PrivateData;
117112
IE_CORE_DECLAREPTR( PrivateData );
118113
PrivateDataPtr m_data;
114+
115+
MergeMap m_mergeMap;
119116
};
120117

121118
IE_CORE_DECLAREPTR( DisplayDriverServer )

src/IECoreImage/DisplayDriverServer.cpp

Lines changed: 10 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -73,8 +73,6 @@ IE_CORE_DEFINERUNTIMETYPED( DisplayDriverServer );
7373
namespace
7474
{
7575

76-
DisplayDriverServer::MergeMap g_mergeMap;
77-
7876
/* Set the FD_CLOEXEC flag for the given socket descriptor, so that it will not exist on child processes.*/
7977
static void fixSocketFlags( int socketDesc )
8078
{
@@ -100,7 +98,7 @@ class DisplayDriverServer::Session : public RefCounted
10098
{
10199
public:
102100

103-
Session( boost::asio::io_service& io_service );
101+
Session( boost::asio::io_service& io_service, DisplayDriverServer::MergeMap& mergeMap );
104102
~Session() override;
105103

106104
boost::asio::ip::tcp::socket& socket();
@@ -119,7 +117,8 @@ class DisplayDriverServer::Session : public RefCounted
119117
DisplayDriverPtr m_displayDriver;
120118
DisplayDriverServerHeader m_header;
121119
CharVectorDataPtr m_buffer;
122-
std::optional<int> m_mergeId;
120+
DisplayDriverServer::MergeMap& m_mergeMap;
121+
std::optional<int> m_mergeId;
123122
};
124123

125124
class DisplayDriverServer::PrivateData : public RefCounted
@@ -202,7 +201,7 @@ DisplayDriverServer::DisplayDriverServer( DisplayDriverServer::Port portNumber )
202201
{
203202
m_data = new DisplayDriverServer::PrivateData( portNumber );
204203

205-
DisplayDriverServer::SessionPtr newSession( new DisplayDriverServer::Session( m_data->m_service ) );
204+
DisplayDriverServer::SessionPtr newSession( new DisplayDriverServer::Session( m_data->m_service, m_mergeMap ) );
206205
m_data->m_acceptor.async_accept( newSession->socket(),
207206
boost::bind( &DisplayDriverServer::handleAccept, this, newSession,
208207
boost::asio::placeholders::error));
@@ -265,17 +264,6 @@ const DisplayDriverServer::PortRange &DisplayDriverServer::registeredPortRange(
265264
return it->second;
266265
}
267266

268-
const DisplayDriverServer::MergeDriverInfo &DisplayDriverServer::getMergeDriverInfo( int mergeId )
269-
{
270-
auto it = g_mergeMap.find( mergeId );
271-
if( it == g_mergeMap.end() )
272-
{
273-
throw IECore::InvalidArgumentException( "DisplayDriverServer::getMergeCount : " + std::to_string(mergeId) + " is not in the merge map." );
274-
}
275-
276-
return it->second;
277-
}
278-
279267
DisplayDriverServer::Port DisplayDriverServer::portNumber()
280268
{
281269
return m_data->m_acceptor.local_endpoint().port();
@@ -297,7 +285,7 @@ void DisplayDriverServer::handleAccept( DisplayDriverServer::SessionPtr session,
297285
{
298286
if (!error)
299287
{
300-
DisplayDriverServer::SessionPtr newSession( new DisplayDriverServer::Session( m_data->m_service ) );
288+
DisplayDriverServer::SessionPtr newSession( new DisplayDriverServer::Session( m_data->m_service, m_mergeMap ) );
301289
m_data->m_acceptor.async_accept( newSession->socket(),
302290
boost::bind( &DisplayDriverServer::handleAccept, this, newSession,
303291
boost::asio::placeholders::error));
@@ -309,8 +297,8 @@ void DisplayDriverServer::handleAccept( DisplayDriverServer::SessionPtr session,
309297
* DisplayDriverServer::Session functions
310298
*/
311299

312-
DisplayDriverServer::Session::Session( boost::asio::io_service& io_service ) :
313-
m_socket( io_service ), m_displayDriver(nullptr), m_buffer( new CharVectorData( ) )
300+
DisplayDriverServer::Session::Session( boost::asio::io_service& io_service, DisplayDriverServer::MergeMap& mergeMap ) :
301+
m_socket( io_service ), m_displayDriver(nullptr), m_buffer( new CharVectorData( ) ), m_mergeMap( mergeMap )
314302
{
315303
}
316304

@@ -386,10 +374,10 @@ void DisplayDriverServer::Session::handleReadHeader( const boost::system::error_
386374
}
387375
else
388376
{
389-
auto &m = g_mergeMap.at(m_mergeId.value()); // Error out if not found
377+
auto &m = m_mergeMap.at(m_mergeId.value()); // Error out if not found
390378
if ( --m.mergeCount <= 0 )
391379
{
392-
g_mergeMap.erase(m_mergeId.value());
380+
m_mergeMap.erase(m_mergeId.value());
393381
m_displayDriver->imageClose();
394382
}
395383
}
@@ -462,7 +450,7 @@ void DisplayDriverServer::Session::handleReadOpenParameters( const boost::system
462450
m_mergeId = parameters->member<IntData>( "displayDriverServer:mergeId", false /* throw if missing */ )->readable();
463451

464452
// Check if merge ID in map, if not then create display driver and session count pair with merge ID.
465-
auto &m = g_mergeMap[m_mergeId.value()];
453+
auto &m = m_mergeMap[m_mergeId.value()];
466454
if ( !m.mergeDriver )
467455
{
468456
const IntData *sessionClientsData = parameters->member<IntData>( "displayDriverServer:mergeClients", true /* throw if missing */ );

src/IECoreImageBindings/DisplayDriverServerBinding.cpp

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -72,12 +72,6 @@ boost::python::tuple registeredPortRange( const std::string &name )
7272
return boost::python::make_tuple( range.first, range.second );
7373
}
7474

75-
boost::python::tuple getMergeDriverInfo( int mergeId )
76-
{
77-
auto mergeDriverInfo = DisplayDriverServer::getMergeDriverInfo( mergeId );
78-
return boost::python::make_tuple( mergeDriverInfo.mergeDriver, mergeDriverInfo.mergeCount );
79-
}
80-
8175
} // namespace
8276

8377
namespace IECoreImageBindings
@@ -95,7 +89,6 @@ void bindDisplayDriverServer()
9589
.def( "registerPortRange", &::registerPortRange ).staticmethod( "registerPortRange" )
9690
.def( "deregisterPortRange", &DisplayDriverServer::deregisterPortRange ).staticmethod( "deregisterPortRange" )
9791
.def( "registeredPortRange", &registeredPortRange ).staticmethod( "registeredPortRange" )
98-
.def( "getMergeDriverInfo", &getMergeDriverInfo).staticmethod( "getMergeDriverInfo" )
9992
;
10093

10194
}

test/IECoreImage/DisplayDriverServerTest.py

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -161,23 +161,8 @@ def testMergeMap( self ) :
161161
idd2.imageData( imath.Box2i( imath.V2i( img.dataWindow.min().x, i + img.dataWindow.min().y ), imath.V2i( img.dataWindow.max().x, i + img.dataWindow.min().y) ), buf )
162162
idd3.imageData( imath.Box2i( imath.V2i( img.dataWindow.min().x, i + img.dataWindow.min().y ), imath.V2i( img.dataWindow.max().x, i + img.dataWindow.min().y) ), buf )
163163

164-
# Test that the merge map has merge id 42 and that there are two clients
165-
mergeDriverInfo = IECoreImage.DisplayDriverServer.getMergeDriverInfo( 42 )
166-
self.assertEqual( mergeDriverInfo[1], 2 )
167-
168-
# Test that a new merge driver with a new id creates a new display driver
169-
mergeDriverInfo2 = IECoreImage.DisplayDriverServer.getMergeDriverInfo( 666 )
170-
self.assertNotEqual( mergeDriverInfo[0], mergeDriverInfo2[0] )
171-
172-
# Test that one image close will remove one client from the merge map
173164
idd1.imageClose()
174-
mergeDriverInfo = IECoreImage.DisplayDriverServer.getMergeDriverInfo( 42 )
175-
self.assertEqual( mergeDriverInfo[1], 1 )
176-
177-
# Test that after the last image close no clients are left in the map
178165
idd2.imageClose()
179-
self.assertRaises( RuntimeError, lambda : IECoreImage.DisplayDriverServer.getMergeDriverInfo( 42 ) )
180-
181166
idd3.imageClose()
182167

183168
newImg = IECoreImage.ImageDisplayDriver.removeStoredImage( "myHandle1" )

0 commit comments

Comments
 (0)